ホームページ  >  記事  >  バックエンド開発  >  PHP携帯電話認証コードを実装する方法

PHP携帯電話認証コードを実装する方法

藏色散人
藏色散人オリジナル
2021-03-08 11:20:414353ブラウズ

php携帯電話認証コードの実装方法:まずクラウドフィルムと現像情報認証を登録し、テンプレートを設定し、次に「easysms」ファイルに「'default'=>[]」などを追加します。 .php" ファイル;次に、Yun Pian の API_KEY を取得し、最後にコントローラー コードを通じて検証コードを取得します。

PHP携帯電話認証コードを実装する方法

#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。

PHP SMS 検証コードの実装プロセスの詳細な説明

携帯電話番号を使用してブログ (Laravel) の登録セクションに登録し、送信する必要があります。 SMS 認証コード。

Yunpian を使用する SMS サービス プロバイダーは、もちろん、特定の SMS サービス プロバイダーを自由に選択できます。

1. 実装プロセス

携帯電話番号を入力し、クリックして確認コードを取得します
正しい SMS 確認コードを送信すると、登録が完了します

2. 導入アイデアマップ

3. クラウドフィルムの登録、開発情報認証、テンプレート設定 ここでは詳しく説明しません [推奨: "PHP ビデオ チュートリアル "]

4. easy-sms をインストールします。easy-sms はテキスト メッセージ送信コンポーネントですAn Zhengchao によって書かれたこのコンポーネントを使用すると、SMS 送信機能をすぐに実装できます。

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/ 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;);
  }
}

最後に 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;
}

上記のプロセスは、携帯電話の確認コードの基本的な手順です。

以上がPHP携帯電話認証コードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。