>  기사  >  백엔드 개발  >  Laravel 프레임워크에서 PHP 휴대폰 SMS 인증 코드 구현 프로세스

Laravel 프레임워크에서 PHP 휴대폰 SMS 인증 코드 구현 프로세스

不言
不言원래의
2018-08-10 11:04:552303검색

이 기사의 내용은 laravel 프레임워크에서 PHP 휴대전화 SMS 인증 코드를 구현하는 과정에 관한 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

특정 SMS 서비스 제공업체를 자유롭게 선택할 수 있습니다.

1. 구현 과정

휴대폰 번호를 입력하고 클릭하여 인증 코드를 받으세요
올바른 SMS 인증 코드를 제출하면 등록이 완료됩니다

2. 구현 아이디어 맵

Laravel 프레임워크에서 PHP 휴대폰 SMS 인증 코드 구현 프로세스

3.

4. easy-sms 설치는 An Zhengchao가 작성한 문자 메시지 전송 구성 요소입니다. .

 composer require "overtrue/easy-sms"
    //新建配置文件
    touch config/easysms.php

그런 다음 easysms.php 파일에 다음 콘텐츠를 추가하세요.

 <?php

   return [

       &#39;timeout&#39;=>5.0,
       &#39;default&#39;=>[
           // 网关调用策略,默认:顺序调用
           &#39;strategy&#39; => \Overtrue\EasySms\Strategies\OrderStrategy::class,

           // 默认可用的发送网关
           &#39;gateways&#39; => [
               &#39;yunpian&#39;,
           ],
       ],
       // 可用的网关配置
       &#39;gateways&#39; => [
           &#39;errorlog&#39; => [
               &#39;file&#39; => &#39;/tmp/easy-sms.log&#39;,
           ],
           &#39;yunpian&#39; => [
               &#39;api_key&#39; => env(&#39;YUNPIAN_API_KEY&#39;),
           ],
       ],


   ];

그런 다음 ServiceProvider를 만듭니다

  php artisan make:provider EasySmsServiceProvider

파일을 수정하세요

app/providers/E asySmsService Provider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Overtrue\EasySms\EasySms;

class EasySmsServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton(EasySms::class,function ($app){

            return new EasySms(config(&#39;easysms&#39;));

        });

        $this->app->alias(EasySms::class,&#39;easysms&#39;);
    }
}

마지막으로 config/app.php를 열고 공급자에

 App\Providers\EasySmsServiceProvider::class,

5를 추가하여 클라우드 조각의 API_KEY를 가져옵니다.

.env에서 YUNPIAN_API_KEY를 구성합니다. 다음을 교체해야 합니다. 자신의 키

6를 사용하면 컨트롤러 코드가 인증 코드를 얻습니다(코드와 키를 캐시에 저장)

public function getVerificationCode($request)
    {
        if(FALSE === $this->validateApiRequest($request->all(),
                [&#39;mobile&#39; => &#39;required|regex:/^1[34578]\d{9}$/|unique:users&#39;],[
                    &#39;mobile.required&#39;=>&#39;请输入手机号&#39;,
                    &#39;mobile.regex&#39;=>&#39;手机号格式不正确&#39;,
                    &#39;mobile.unique&#39;=>&#39;手机号已存在&#39;
                ])){
            return false;
        }

        $mobile = trim($request->get(&#39;mobile&#39;));
       $code = str_pad(random_int(1,9999),4,0,STR_PAD_LEFT);


        try{
             $easySms->send($mobile,
                [&#39;content&#39;=>"【UKNOW】您的验证码是{$code}。如非本人操作,请忽略本短信"]             );

        }catch(\GuzzleHttp\Exception\ClientException $exception){

            $response = $exception->getResponse();
            $result =json_decode($response->getBody()->getContents(),true);
            $this->setMsg($result[&#39;msg&#39;]?? &#39;短信发送异常&#39;);
            return false;
        }

        $key = &#39;verificationCode&#39;.str_random(15);
        $expiredAt = now()->addMinutes(1);
        Cache::put($key,[&#39;mobile&#39;=>$mobile,&#39;code&#39;=>$code],$expiredAt);

        return [
            &#39;verification_key&#39;=>$key,
            &#39;expiredAt&#39;=>$expiredAt->toDateTimeString(),
            &#39;verification_code&#39;=>$code
            ];
    }

7, 인증 코드를 비교하세요

public function userStore($mobile, $verification_key,$code,$password,$password_confirmation)
    {

        $params = [
            &#39;mobile&#39;=>$mobile,
            &#39;verification_key&#39;=>$verification_key,
            &#39;code&#39;=>$code,
            &#39;password&#39;=>$password,
            &#39;password_confirmation&#39;=>$password_confirmation
        ];
        //参数判断
        if (
            FALSE === $this->validateApiRequest($params, [
                &#39;mobile&#39;  => &#39;required|regex:/^1[34578]\d{9}$/|unique:users&#39;,
                &#39;code&#39;    => &#39;required&#39;,
                &#39;verification_key&#39;=>&#39;required&#39;,
                &#39;password&#39;     => &#39;required|min:6|confirmed&#39;,
                &#39;password_confirmation&#39; => &#39;required&#39;,
            ], [
                &#39;mobile.required&#39; => &#39;请输入手机号&#39;,
                &#39;mobile.regex&#39;    => &#39;手机号格式不正确&#39;,
                &#39;mobile.unique&#39;   => &#39;手机号已存在&#39;,
                &#39;code.required&#39;   => &#39;请输入短信验证码&#39;,
                &#39;password.required&#39;    => &#39;请输入密码&#39;,
                &#39;password.min&#39;         => &#39;密码不得小于6位&#39;,
                &#39;password.confirmed&#39;   => &#39;密码前后不一致&#39;,
                &#39;password_confirmation.required&#39;=>&#39;请再次输入密码&#39;,
                &#39;verification_key.required&#39;=>&#39;请输入短信验证码&#39;
            ])
        ) {
            return false;
        }

        $verifyData = Cache::get($verification_key);
        if( !$verifyData){
            $this->setMsg(&#39;验证码已失效&#39;);
            return false;
        }
        if(!hash_equals($code,(string)$verifyData[&#39;code&#39;])){
            $this->setMsg(&#39;验证码错误&#39;);
            return false;
        }

        Cache::forget($verification_key);
        $user = User::create([
            &#39;mobile&#39;=>$mobile,
            &#39;password&#39;=>bcrypt($password)
        ]);
        if(!$user){
            $this->setMsg(&#39;注册失败&#39;);
            return false;
        }
        return true;
    }

관련 권장 사항:

Thinkphp 템플릿 모바일 WeChat 결제인지 WeChat 스캔 코드 결제인지 판단하는 방법

PHP에서 페이지 점프 기능을 구현하는 방법은 무엇인가요? (함수 라벨 예시)

위 내용은 Laravel 프레임워크에서 PHP 휴대폰 SMS 인증 코드 구현 프로세스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.