ホームページ >バックエンド開発 >PHPチュートリアル >LaravでSMS登録を実装する方法

LaravでSMS登録を実装する方法

不言
不言オリジナル
2018-06-13 16:31:271343ブラウズ

この記事では主に、Yunpian SMS プラットフォームを使用した、Laravel を使用した SMS 登録のサンプル コードを紹介します。その内容は非常に優れているので、参考として共有します。

私は社内でモール プロジェクトに取り組んでいます。バックエンドが 1 つしかないため、SMS 経由で登録する番です。最初はまだ心が弱っていましたが、幸いにも Laravel-china コミュニティの Summer マスターが書いた本があります。その中の書き方とアイデアを参考に、easy-sms パッケージを使用して、午後半日くらいでスムーズに作成できました。夕方にはみんなに共有します。

1. SMS オペレータを決定する

#大手企業が皆 Yunpian を使用しているのを見たので、迷わずそれを使用しました。企業はこのテキスト メッセージング プラットフォームを使用することをお勧めしますが、他のプラットフォームも利用できます。

まず自分でアカウントを登録し、この

をクリックしてアクセスを開始し、初心者向けガイダンス プロセスを完了してください。

2 番目の署名とテンプレートは、以下に入力したものと同様に入力する必要があります。

このテンプレートは、easy-sms パッケージを使用するときに設定したテキスト メッセージの内容とまったく同じである必要があることに注意してください。そうでない場合は、エラーが報告されます。

APIKEY も忘れずに取得してください。その際、envで設定を行います。

# 云片
YUNPIAN_API_KEY=9c60bdd**********

2. インストール easy-sms パッケージ

SMS 送信機能をすぐに実装するには、このパッケージを使用します。

composer require "overtrue/easy-sms"

このコンポーネントにはまだ Laravel の ServiceProvider がないため、使いやすいように、自分でカプセル化できます。

まず、config ディレクトリに easysms.php ファイルを追加します。

config/easysms.php に次の内容を入力します。

<?php
return [
 // HTTP 请求的超时时间(秒)
 &#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 Overtrue\EasySms\EasySms;
use Illuminate\Support\ServiceProvider;

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

 /**
  * Register the application 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 作成したサービスを providers, App\Providers\EasySmsServiceProvider::class,

App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,

App\Providers\EasySmsServiceProvider::class, //easy-sms

3 に追加し、作成しますルートと対応するコントローラー

まずルートを作成します。次に示すように、SMS 検証コードを要求するための ajax メソッドと、登録を確認するための論理メソッドが必要です。

ルートが作成されたら、コマンドを使用してコントローラー

Route::group([&#39;prefix&#39; => &#39;verificationCodes&#39;, &#39;as&#39; => &#39;verificationCodes.&#39;], function() {
  Route::post(&#39;register&#39;, &#39;VerificationCodesController@register&#39;)->name(&#39;register&#39;);
  Route::get(&#39;ajaxregister&#39;, &#39;VerificationCodesController@ajaxregister&#39;)->name(&#39;ajaxregister&#39;);
 });

を生成し、その中に

register メソッドと ajaxregister メソッドを直接書き込みます

コード ロジック

ファイルを変更します

app/Home/VerificationCodesController.php

php artisan make:controller Home\VerificationCodesController

このように、ユーザーはテキスト メッセージを受信でき、フロント エンドはこの

key を保存し、登録フォームを送信するときにそれをバックエンドに渡して有効期限が切れているかどうかを判断する必要があります。以下は、有効期限が切れているかどうか、確認コードが間違っているかどうかを判断するためです。

<?php
.
.
.
use Overtrue\EasySms\EasySms;
use App\Models\System\User;
class VerificationCodesController extends Controller
{
 // 这里验证就不写了。
 public function ajaxregister(VerificationCodeRequest $request, EasySms $easySms)
 {
  //获取前端ajax传过来的手机号
  $phone = $request->phone;
  
  // 生成4位随机数,左侧补0
  $code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);
  
  try {
   $result = $easySms->send($mobile, [
    &#39;content&#39; => "【安拾商城】您的验证码是{$code}。如非本人操作,请忽略本短信"
   ]);
  } catch (Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) {
   $response = $exception->getExceptions();
   return response()->json($response);
  }
  
  //生成一个不重复的key 用来搭配缓存cache判断是否过期
  $key = &#39;verificationCode_&#39; . str_random(15);
  $expiredAt = now()->addMinutes(10);
  
  // 缓存验证码 10 分钟过期。
  \Cache::put($key, [&#39;mobile&#39; => $mobile, &#39;code&#39;=> $code], $expiredAt);
  
  return response()->json([
   &#39;key&#39; => $key,
   &#39;expired_at&#39; => $expiredAt->toDateTimeString(),
  ], 201);
 }

上記の

hash_equals は、タイミング攻撃を防ぐことができる文字列比較です~

上記は、私のプロセス全体です。

上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

Laravel を使用して Gravatar アバター アドレスを生成する

laravel を使用してカスタム Artisan Make コマンドを作成する方法新しいクラス ファイルを作成します

#

以上がLaravでSMS登録を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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