亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

使用 laravel sms 構建短信驗證碼發送校驗功能

2024-05-05 00:00:57
字體:
來源:轉載
供稿:網友

laravel 實現短信驗證碼功能,搜索資料發現比較流行的有兩個包:

一個是laravel sms 地址  https://github.com/toplan/laravel-sms

一個是easy sms 地址https://github.com/overtrue/easy-sms,

項目中需要實現一個發送和驗證短信驗證碼的功能。以前的辦法稍顯繁瑣。經高人指點,發現可以用 laravel-sms 這個包替代。且配置和使用簡單易學。故有了這篇示例。

本例使用了Laravel 5.5、 Api Starter Kit 以及 Laravel Sms 2.6。

本例使用的短信服務商為云片。

安裝

在項目根目錄下執行(推薦):

composer require toplan/laravel-sms:~2.6composer require toplan/laravel-sms:~2.6 

也可以在 composer.json 的 require 字段中添加:

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

然后在項目根目錄下執行:

composer updatecomposer update

 在 config/app.php 的 providers 數組中添加:

Toplan/PhpSms/PhpSmsServiceProvider::class,Toplan/Sms/SmsManagerServiceProvider::class,Toplan/PhpSms/PhpSmsServiceProvider::class,Toplan/Sms/SmsManagerServiceProvider::class, 

并在 aliases 數組里添加:

'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。

在 phpsms.php 中可以配置代理器信息及均衡調度方案。

在 laravel-sms.php 中可以配置驗證碼的發送與驗證方案。

同時會向 database/migrations 中復制 2015_12_21_111514_create_sms_table.php 文件。用于生成 laravel_sms 表。

配置

這里僅以云片為例。

配置 phpsms.php

設置 phpsms.php 中 agnets 數組中云片的代理器信息。

'YunPian' => [ //用戶唯一標識,必須 'apikey' => '在這里填寫你的 APIKEY',],'YunPian' => [ //用戶唯一標識,必須 'apikey' => '在這里填寫你的 APIKEY',],

設置 scheme 數組,配置均衡調度方案。

'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 或負數則不啟用],

設置驗證碼內容短信。

'content' => function ($code, $minutes, $input) { return "您的驗證碼是:{$code} ({$minutes}分鐘內有效,如非本人操作,請忽略)";},'content' => function ($code, $minutes, $input) { return "您的驗證碼是:{$code} ({$minutes}分鐘內有效,如非本人操作,請忽略)";},

如果有需要,可以開啟數據庫日志。需要提前運行 php artisan migrate 生成 laravel_sms 表。

'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 查看驗證碼短信發送和校驗狀態。

若啟用了數據庫日志,可以在 laravel_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。

'locale' => 'zh_cn','locale' => '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 相關地址,可以看到對應的提示信息語言已經本地化。

總結

以上所述是小編給大家介紹的使用 laravel-sms 構建短信驗證碼發送校驗模塊,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!

 

注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
疯狂蹂躏欧美一区二区精品| 激情av一区二区| 国产精品男人爽免费视频1| 91在线观看欧美日韩| www.亚洲成人| 国产97免费视| 中文字幕亚洲一区在线观看| 懂色av一区二区三区| 国产91在线高潮白浆在线观看| 亚洲福利在线视频| 欧洲精品久久久| 欧美成人h版在线观看| 国产精品一区二区三区毛片淫片| 57pao国产成人免费| 亚洲第一色在线| 亚洲成人在线网| 亚洲国产一区二区三区四区| 国产精品久久电影观看| 疯狂蹂躏欧美一区二区精品| 国产精品第100页| 青草青草久热精品视频在线观看| 欧美电影免费观看高清完整| 日韩av综合网| 欧美日韩在线视频一区二区| 亚洲人成免费电影| 国产亚洲美女久久| 亚洲人av在线影院| 亚洲性视频网站| 日韩欧美精品免费在线| 国产精品久久久久久久久久小说| 国模精品视频一区二区三区| 国产精品中文久久久久久久| 91精品免费看| 国产97免费视| 日韩欧美中文第一页| 欧美亚洲日本黄色| 国产精品黄视频| 91超碰中文字幕久久精品| 成人激情春色网| 久久久av亚洲男天堂| 性色av一区二区三区红粉影视| 国产午夜精品美女视频明星a级| 色婷婷成人综合| 91在线免费观看网站| 国产综合久久久久久| 26uuu亚洲伊人春色| 日韩精品久久久久| 精品国产一区二区三区四区在线观看| 最近2019年日本中文免费字幕| 欧美日韩一区二区在线| 亚洲第一福利网站| 国产亚洲精品久久| 最近2019中文字幕一页二页| 国产欧美日韩专区发布| 午夜免费在线观看精品视频| 亚洲第一区中文99精品| 国产欧美日韩最新| 欧美亚洲激情在线| 5278欧美一区二区三区| 夜夜嗨av一区二区三区免费区| 久久国产加勒比精品无码| 2019亚洲男人天堂| 亚洲精品99久久久久| 国产婷婷色综合av蜜臀av| 日本精品久久中文字幕佐佐木| 日韩成人av在线播放| 国产成人精品999| 成人国产精品免费视频| 久久躁日日躁aaaaxxxx| 97激碰免费视频| 中文字幕最新精品| 亚洲国产成人精品女人久久久| 日韩视频第一页| 欧美国产日韩一区二区在线观看| 亚洲美女在线视频| 国产精品一二三在线| 午夜免费在线观看精品视频| 成人有码在线视频| 国产中文字幕亚洲| 色777狠狠综合秋免鲁丝| 久久久久国产精品免费网站| 国产盗摄xxxx视频xxx69| 在线观看免费高清视频97| 2019国产精品自在线拍国产不卡| 中文字幕自拍vr一区二区三区| 欧美最猛黑人xxxx黑人猛叫黄| 欧美福利视频在线| 亚洲乱码国产乱码精品精| 亚洲影视九九影院在线观看| 国产精品尤物福利片在线观看| 91av在线精品| 国产欧美精品日韩| 国产精品无码专区在线观看| 精品久久在线播放| 免费91在线视频| 欧美午夜激情小视频| 在线观看欧美日韩国产| 国产成人精品久久亚洲高清不卡| www.国产一区| 国产精品免费久久久| 久久6免费高清热精品| 久久色在线播放| 国产在线观看精品一区二区三区| 国产精品成人免费视频| 久久91精品国产91久久久| 精品视频在线导航| 国内伊人久久久久久网站视频| 亚洲国产精品久久91精品| 亚洲欧洲国产精品| 国内揄拍国内精品| 亚洲精品免费一区二区三区| 久久91亚洲人成电影网站| 日韩av手机在线| 国产精品99免视看9| 色综合天天狠天天透天天伊人| 国产日产欧美精品| 欧美日韩国产麻豆| 亚洲精品乱码久久久久久按摩观| 国产精品永久免费视频| 日本精品久久中文字幕佐佐木| 亚洲电影免费观看高清完整版| 亚洲欧美日韩高清| 精品国产1区2区| 91中文精品字幕在线视频| 国产欧美一区二区三区四区| 欧美—级高清免费播放| 国产福利成人在线| 欧美高清在线播放| 国产亚洲欧美一区| 91精品久久久久久久久不口人| 国产成人精品一区二区在线| 国产精品一区电影| 亚洲综合成人婷婷小说| 78m国产成人精品视频| 亚洲第一av网| 最近更新的2019中文字幕| 日本午夜在线亚洲.国产| 欧美精品在线观看91| 情事1991在线| 欧美日韩日本国产| 国产精品入口尤物| 欧美精品中文字幕一区| 欧美性20hd另类| 97国产真实伦对白精彩视频8| 国产精品爽爽爽爽爽爽在线观看| 精品国产91久久久久久| 久久香蕉国产线看观看网| 国产精品第二页| 久久免费视频观看| 亚洲视频在线播放| 97婷婷大伊香蕉精品视频| 国产精品美女久久久免费| 国内精品久久久久伊人av| 亚洲欧美日韩中文在线| 青青久久av北条麻妃黑人| 欧美专区在线观看| 51色欧美片视频在线观看| 欧美一二三视频| 欧美色xxxx| 亚洲国产成人精品久久久国产成人一区| 国产精品久久久久久久9999| 亚洲欧洲日产国码av系列天堂| 欧美色videos| 欧美乱人伦中文字幕在线|