この記事では、laravel-sms を使用して SMS 検証コード送信検証モジュールを構築する方法をサンプル コードを通じて紹介します。これは非常に優れており、必要な方は参考にしてください。 SMS 認証コード機能を実装します。情報を検索すると、2 つの人気のあるパッケージを見つけました。
1 つは、laravel SMS アドレス https://github.com/toplan/laravel-sms
1 つは、easy sms のアドレスは https://github.com/overtrue/easy-sms です。
プロジェクトでは、SMS 検証コードを送信して検証する機能を実装する必要があります。以前の方法は少し面倒でした。専門家からのアドバイスの結果、laravel-sms パッケージを代わりに使用できることがわかりました。設定も使用も簡単です。したがって、この例です。
この例では、Laravel 5.5、Api Starter Kit、および Laravel Sms 2.6 を使用します。
この例で使用されている SMS サービス プロバイダーは Yunpian です。
#インストールプロジェクトのルート ディレクトリで実行します (推奨):
composer require toplan/laravel-sms:~2.6 composer require toplan/laravel-sms:~2.6
"toplan/laravel-sms": "2.6" "toplan/laravel-sms": "2.6"
composer update composer update
Toplan\PhpSms\PhpSmsServiceProvider::class, Toplan\Sms\SmsManagerServiceProvider::class, Toplan\PhpSms\PhpSmsServiceProvider::class, Toplan\Sms\SmsManagerServiceProvider::class,
'PhpSms' => Toplan\PhpSms\Facades\Sms::class, 'SmsManager' => Toplan\Sms\Facades\SmsManager::class, 'PhpSms' => Toplan\PhpSms\Facades\Sms::class, 'SmsManager' => Toplan\Sms\Facades\SmsManager::class,
php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider" php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider" php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider" php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider"
ここでは、例としてクラウド スライスのみを取り上げます。
phpsms.phpの設定phpsms.phpのagnets配列にクラウドスライスのプロキシ情報を設定します。'YunPian' => [ //用户唯一标识,必须 'apikey' => '在这里填写你的 APIKEY', ], 'YunPian' => [ //用户唯一标识,必须 'apikey' => '在这里填写你的 APIKEY', ],
'scheme' => [ 'YunPian', ], 'scheme' => [ 'YunPian', ],
'route' => [ 'enable' => true, 'prefix' => 'laravel-sms', 'middleware' => ['api'], ], 'route' => [ 'enable' => true, 'prefix' => 'laravel-sms', 'middleware' => ['api'], ],
'interval' => 60, 'interval' => 60,
#
'validation' => [ 'phone_number' => [ //需验证的字段 'isMobile' => true, //本字段是否为手机号 'enable' => true, //是否需要验证 'default' => 'mobile_required', //默认的静态规则 'staticRules' => [ //全部静态规则 'mobile_required' => 'required|zh_mobile', ], ], ], 'validation' => [ 'phone_number' => [ //需验证的字段 'isMobile' => true, //本字段是否为手机号 'enable' => true, //是否需要验证 'default' => 'mobile_required', //默认的静态规则 'staticRules' => [ //全部静态规则 'mobile_required' => 'required|zh_mobile', ], ], ],
'code' => [ 'length' => 4, //验证码长度 'validMinutes' => 10, //验证码有效时间长度,单位为分钟 'repeatIfValid' => true, //验证码有效期内是否重复使用 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用 ], 'code' => [ 'length' => 4, //验证码长度 'validMinutes' => 10, //验证码有效时间长度,单位为分钟 'repeatIfValid' => true, //验证码有效期内是否重复使用 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用 ],
'content' => function ($code, $minutes, $input) { return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)"; }, 'content' => function ($code, $minutes, $input) { return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)"; },
'dbLogs' => 'ture', 'dbLogs' => 'ture',
app/Utils の下に新しい SmsCodeUtil.php を作成します。検証コードの送信と検証機能を内部に実装します。このようにして、他のクラスをいつでも呼び出すことができるため、コードの再利用性が向上します。
送信モジュール送信前に次のような携帯電話番号を確認する必要があります:
validateSendable() :验证是否满足发送间隔 validateFields() :验证数据合法性
use SmsManager; trait SmsCodeUtil { public function sendSmsCode() { $result = SmsManager::validateSendable(); if(!$result['success']) { return respondUnprocessable($result['message']); } $result = SmsManager::validateFields(); if(!$result['success']) { return respondUnprocessable($result['message']); } $result = SmsManager::requestVerifySms(); if(!$result['success']) { return respondUnprocessable($result['message']); } return respondSuccess($result['message']); } } use SmsManager; trait SmsCodeUtil { public function sendSmsCode() { $result = SmsManager::validateSendable(); if(!$result['success']) { return respondUnprocessable($result['message']); } $result = SmsManager::validateFields(); if(!$result['success']) { return respondUnprocessable($result['message']); } $result = SmsManager::requestVerifySms(); if(!$result['success']) { return respondUnprocessable($result['message']); } return respondSuccess($result['message']); } }
##検証モジュール
ログインする際、携帯電話番号と確認コードの確認が必要な場合があります。そのため、SmsCodeUtil.phpに認証コード検証機能を追加する必要があります。コードは公式 Github で提供されているので、多少変更することができます。
public function validateSmsCode() { //验证数据 $validator = Validator::make(inputAll(), [ 'phone_number' => 'required|confirm_mobile_not_change|confirm_rule:mobile_required', 'sms_code' => 'required|verify_code', ]); if ($validator->fails()) { //验证失败后建议清空存储的发送状态,防止用户重复试错 SmsManager::forgetState(); respondUnprocessable(formatValidationErrors($validator)); } } public function validateSmsCode() { //验证数据 $validator = Validator::make(inputAll(), [ 'phone_number' => 'required|confirm_mobile_not_change|confirm_rule:mobile_required', 'sms_code' => 'required|verify_code', ]); if ($validator->fails()) { //验证失败后建议清空存储的发送状态,防止用户重复试错 SmsManager::forgetState(); respondUnprocessable(formatValidationErrors($validator)); } }
機能テスト
次にルーティングとコントローラーを構成し、テストします。機能が正常かどうか。 host-domain/laravel-sms/info を同時に開くと、検証コード SMS の送信と検証ステータスを表示できます。
データベースログが有効になっている場合は、laravel_sms テーブルで SMS 送信結果の詳細情報を確認できます。
最初に api.php を追加します:
$api->post('/auth/send-sms-code', 'Auth\LoginController@sendSmsCode'); $api->post('/auth/validate-sms-code', 'Auth\LoginController@validateSmsCode'); $api->post('/auth/send-sms-code', 'Auth\LoginController@sendSmsCode'); $api->post('/auth/validate-sms-code', 'Auth\LoginController@validateSmsCode');
次に LoginController.php を追加します:
use App\Utils\SmsCodeUtil; class LoginController extends Controller { use SmsCodeUtil; ... } use App\Utils\SmsCodeUtil; class LoginController extends Controller { use SmsCodeUtil; ... }
次に、Postman または他の同様のツールを使用して API 機能をテストします。
確認コードの送信
POST 服务器地址/api/auth/send-sms-code
{
"phone_number": "手机号"
}
POST 服务器地址/api/auth/send-sms-code
{
"phone_number": "手机号"
}
確認コードが渡された場合、正常に送信されると、次のメッセージが返されます:
{ "message": "短信验证码发送成功,请注意查收", "status_code": 200 } { "message": "短信验证码发送成功,请注意查收", "status_code": 200 }
同時に入力された電話番号に確認コードが届きます。
検証に失敗した場合、または送信に失敗した場合は、対応するエラー メッセージが返されます。
#検証検証コードPOST 服务器地址/api/auth/validate-sms-code
{
"phone_number": "手机号",
"sms_code": "验证码"
}
POST 服务器地址/api/auth/validate-sms-code
{
"phone_number": "手机号",
"sms_code": "验证码"
}
うわー
然后在 resources\lang\zh_cn 文件夹下新建 validation.php,并填入本地化信息:
return [ 'required' => '缺少:attribute参数', 'zh_mobile' => '非标准的中国大陆手机号', 'confirm_mobile_not_change' => '提交的手机号已变更', 'verify_code' => '验证码不合法或无效', 'attributes' => [ 'phone_number' => '手机号', 'sms_code' => '验证码', ], ]; return [ 'required' => '缺少:attribute参数', 'zh_mobile' => '非标准的中国大陆手机号', 'confirm_mobile_not_change' => '提交的手机号已变更', 'verify_code' => '验证码不合法或无效', 'attributes' => [ 'phone_number' => '手机号', 'sms_code' => '验证码', ], ];
重新 POST 相关地址,可以看到对应的提示信息语言已经本地化。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Laravel5.2使用Captcha生成验证码实现登录的方法
以上がlaravel smsを使用してSMS認証コードを送信して認証する機能を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。