ホームページ  >  記事  >  バックエンド開発  >  laravel smsを使用してSMS認証コードを送信して認証する機能を構築する

laravel smsを使用してSMS認証コードを送信して認証する機能を構築する

不言
不言オリジナル
2018-06-13 14:22:172094ブラウズ

この記事では、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

また、composer.json の require フィールドに

"toplan/laravel-sms": "2.6"
"toplan/laravel-sms": "2.6"

を追加し、プロジェクトのルート ディレクトリで実行することもできます。

composer update
composer update

config/app.php:

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"

になります。 config フォルダー内に phpsms.php と laravel-sms.php という 2 つの構成ファイルが生成されます。

プロキシ情報とバランスのとれたスケジュール プランは phpsms.php で設定できます。

検証コードの送信と検証スキームはlaravel-sms.phpで設定できます。

同時に、2015_12_21_111514_create_sms_table.php ファイルがdatabase\migrations にコピーされます。 laravel_sms テーブルを生成するために使用されます。

構成

ここでは、例としてクラウド スライスのみを取り上げます。

phpsms.phpの設定

phpsms.phpのagnets配列にクラウドスライスのプロキシ情報を設定します。

'YunPian' => [
 //用户唯一标识,必须
 'apikey' => '在这里填写你的 APIKEY',
],
'YunPian' => [
 //用户唯一标识,必须
 'apikey' => '在这里填写你的 APIKEY',
],

スキーム配列を設定し、バランスの取れたスケジューリング スキームを構成します。

'scheme' => [
 'YunPian',
],
'scheme' => [
 'YunPian',
],

laravel-sms.php

組み込みルーティングを設定します。


'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 或负数则不启用
],

確認コードの内容をSMSで設定します。

'content' => function ($code, $minutes, $input) {
 return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},
'content' => function ($code, $minutes, $input) {
 return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)";
},


必要に応じて、データベースのログ記録を有効にすることができます。 laravel_sms テーブルを生成するには、事前に php 職人移行を実行する必要があります。

'dbLogs' => 'ture',
'dbLogs' => 'ture',

API 実装

app/Utils の下に新しい SmsCodeUtil.php を作成します。検証コードの送信と検証機能を内部に実装します。このようにして、他のクラスをいつでも呼び出すことができるため、コードの再利用性が向上します。

送信モジュール

送信前に次のような携帯電話番号を確認する必要があります:

validateSendable() :验证是否满足发送间隔 
validateFields() :验证数据合法性

検証に合格したら、requestVerifySms() を使用して検証コードを送信します。

具体的なコードは次のとおりです:

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": "验证码"
}
検証に合格した場合、見返りはありません。

検証が失敗した場合は、対応するエラー メッセージが返されます。

ローカライズされたプロンプト情報言語

は、laravel-sms.phpの一部のプロンプト情報のカスタマイズを提供します。残りのプロンプト情報をローカル言語に変換する場合は、別途処理する必要があります。

まず、config/app.php の言語設定が正しいことを確認してください。これは zh_cn に設定されます。

うわー

然后在 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中文网!

相关推荐:

关于Laravel中重写资源路由自定义URL的实现方法

Laravel5.2使用Captcha生成验证码实现登录的方法

通过 Laravel “规范” 的开发短信验证码发送功能

以上がlaravel smsを使用してSMS認証コードを送信して認証する機能を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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