Processus de mise en œuvre du code de vérification SMS du téléphone mobile PHP sous le framework Laravel

不言
Libérer: 2023-04-03 18:00:01
original
2328 Les gens l'ont consulté

Le contenu de cet article concerne le processus de mise en œuvre du code de vérification SMS du téléphone mobile PHP dans le cadre laravel. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Vous êtes libre de choisir des fournisseurs de services SMS spécifiques.

1. Processus de mise en œuvre

Entrez votre numéro de téléphone mobile et cliquez pour obtenir le code de vérification
Après avoir soumis le code de vérification SMS correct, l'enregistrement est terminé

2. . Carte des idées de mise en œuvre

Processus de mise en œuvre du code de vérification SMS du téléphone mobile PHP sous le framework Laravel

3. L'enregistrement des films cloud, la certification des informations de développement et les paramètres du modèle ne sont pas détaillés ici

4. , easy-sms Oui Un composant d'envoi de SMS écrit par An Zhengchao En utilisant ce composant, nous pouvons rapidement implémenter la fonction d'envoi de SMS.

 composer require "overtrue/easy-sms"
    //新建配置文件
    touch config/easysms.php
Copier après la connexion

Ajoutez ensuite le contenu suivant dans le fichier 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;),
           ],
       ],


   ];
Copier après la connexion

Créez ensuite un ServiceProvider

  php artisan make:provider EasySmsServiceProvider
Copier après la connexion

Modifiez le fichier

app/providers/EasySmsServiceProvider.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;);
    }
}
Copier après la connexion

Enfin, ouvrez config/app.php et ajoutez

 App\Providers\EasySmsServiceProvider::class,
Copier après la connexion

5 fournisseurs à obtenez le cloud API_KEY

Configurez YUNPIAN_API_KEY dans .env. Notez que ce qui suit doit être remplacé par votre propre clé

6. Le code du contrôleur obtient le code de vérification (stockez le code et saisissez-le). le cache)

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
            ];
    }
Copier après la connexion

7, comparer le code de vérification

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;
    }
Copier après la connexion

Recommandations associées :

Comment le modèle thinkphp détermine-t-il s'il s'agit d'un paiement mobile WeChat ou d'un paiement par scan code WeChat

Comment PHP souhaite-t-il implémenter le saut de page fonction? (Exemple de balise de fonction)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal