ホームページ >バックエンド開発 >PHPチュートリアル >LaravでSMS登録を実装する方法
この記事では主に、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 请求的超时时间(秒) 'timeout' => 5.0, // 默认发送配置 'default' => [ // 网关调用策略,默认:顺序调用 'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class, // 默认可用的发送网关 'gateways' => [ 'yunpian', ], ], // 可用的网关配置 'gateways' => [ 'errorlog' => [ 'file' => '/tmp/easy-sms.log', ], 'yunpian' => [ 'api_key' => env('YUNPIAN_API_KEY'), ], ], ];
次に、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('easysms')); }); $this->app->alias(EasySms::class, 'easysms'); } }
最後に 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(['prefix' => 'verificationCodes', 'as' => 'verificationCodes.'], function() { Route::post('register', 'VerificationCodesController@register')->name('register'); Route::get('ajaxregister', 'VerificationCodesController@ajaxregister')->name('ajaxregister'); });を生成し、その中に
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, [ 'content' => "【安拾商城】您的验证码是{$code}。如非本人操作,请忽略本短信" ]); } catch (Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) { $response = $exception->getExceptions(); return response()->json($response); } //生成一个不重复的key 用来搭配缓存cache判断是否过期 $key = 'verificationCode_' . str_random(15); $expiredAt = now()->addMinutes(10); // 缓存验证码 10 分钟过期。 \Cache::put($key, ['mobile' => $mobile, 'code'=> $code], $expiredAt); return response()->json([ 'key' => $key, 'expired_at' => $expiredAt->toDateTimeString(), ], 201); }上記の
hash_equals は、タイミング攻撃を防ぐことができる文字列比較です~
Laravel を使用して Gravatar アバター アドレスを生成する
laravel を使用してカスタム Artisan Make コマンドを作成する方法新しいクラス ファイルを作成します
#
以上がLaravでSMS登録を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。