Cet article vous présente l'utilisation de laravel-sms pour créer un module de vérification d'envoi de code de vérification SMS via un exemple de code. Il est très bon et a une valeur de référence. Les amis dans le besoin peuvent s'y référer
laravel. implémente la fonction de code de vérification SMS, en recherchant des informations, j'ai trouvé deux packages populaires :
L'un est l'adresse SMS de Laravel https://github.com/toplan/laravel-sms
L'une est l'adresse SMS facile https://github.com/overtrue/easy-sms,
Le projet doit mettre en œuvre une fonction d'envoi et de vérification des codes de vérification SMS. La méthode précédente était un peu lourde. Après conseils d'experts, j'ai trouvé que le package laravel-sms pouvait être utilisé à la place. Il est facile à configurer et à utiliser. D'où cet exemple.
Cet exemple utilise Laravel 5.5, Api Starter Kit et Laravel Sms 2.6.
Le fournisseur de services SMS utilisé dans cet exemple est Yunpian.
Installer
Exécuter dans le répertoire racine du projet (recommandé) :
composer require toplan/laravel-sms:~2.6 composer require toplan/laravel-sms:~2.6
Vous pouvez également ajouter dans le champ require de composer.json :
"toplan/laravel-sms": "2.6" "toplan/laravel-sms": "2.6"
puis l'exécuter dans le répertoire racine du projet :
composer update composer update
Ajoutez le tableau des fournisseurs de config/app.php :
Toplan\PhpSms\PhpSmsServiceProvider::class, Toplan\Sms\SmsManagerServiceProvider::class, Toplan\PhpSms\PhpSmsServiceProvider::class, Toplan\Sms\SmsManagerServiceProvider::class,
Et ajoutez le tableau d'alias :
'PhpSms' => Toplan\PhpSms\Facades\Sms::class, 'SmsManager' => Toplan\Sms\Facades\SmsManager::class, 'PhpSms' => Toplan\PhpSms\Facades\Sms::class, 'SmsManager' => Toplan\Sms\Facades\SmsManager::class,
Exécuter dans le répertoire racine du projet :
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"
Deux fichiers de configuration seront générés dans le dossier config : phpsms.php et laravel-sms.php.
Les informations de proxy et le plan de planification équilibré peuvent être configurés dans phpsms.php.
Le schéma d'envoi et de vérification du code de vérification peut être configuré dans laravel-sms.php.
En même temps, le fichier 2015_12_21_111514_create_sms_table.php sera copié dans databasemigrations. Utilisé pour générer la table laravel_sms.
Configuration
Ici, nous ne prenons comme exemple que les tranches de cloud.
Configurez phpsms.php
Définissez les informations de proxy de la tranche de cloud dans le tableau agnets de phpsms.php.
'YunPian' => [ //用户唯一标识,必须 'apikey' => '在这里填写你的 APIKEY', ], 'YunPian' => [ //用户唯一标识,必须 'apikey' => '在这里填写你的 APIKEY', ],
Définissez le tableau de schémas et configurez le schéma de planification équilibré.
'scheme' => [ 'YunPian', ], 'scheme' => [ 'YunPian', ],
Configurer laravel-sms.php
Définir le routage intégré.
'route' => [ 'enable' => true, 'prefix' => 'laravel-sms', 'middleware' => ['api'], ], 'route' => [ 'enable' => true, 'prefix' => 'laravel-sms', 'middleware' => ['api'], ],
Définissez l'intervalle de requête en secondes.
'interval' => 60, 'interval' => 60,
Définissez les règles de vérification des numéros.
'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', ], ], ],
Définissez les règles du code de vérification.
'code' => [ 'length' => 4, //验证码长度 'validMinutes' => 10, //验证码有效时间长度,单位为分钟 'repeatIfValid' => true, //验证码有效期内是否重复使用 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用 ], 'code' => [ 'length' => 4, //验证码长度 'validMinutes' => 10, //验证码有效时间长度,单位为分钟 'repeatIfValid' => true, //验证码有效期内是否重复使用 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用 ],
Définir le contenu du code de vérification par SMS.
'content' => function ($code, $minutes, $input) { return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)"; }, 'content' => function ($code, $minutes, $input) { return "您的验证码是:{$code} ({$minutes}分钟内有效,如非本人操作,请忽略)"; },
Si nécessaire, vous pouvez activer la journalisation de la base de données. Vous devez exécuter php artisan migrate à l'avance pour générer la table laravel_sms.
'dbLogs' => 'ture', 'dbLogs' => 'ture',
Implémentation de l'API
Créez un nouveau SmsCodeUtil.php sous app/ Utils et implémentez les fonctions d'envoi et de vérification du code de vérification. De cette manière, d’autres classes peuvent être appelées à tout moment, améliorant ainsi la réutilisabilité du code.
Module d'envoi
Le numéro de téléphone portable doit être vérifié avant l'envoi, notamment :
validateSendable() :验证是否满足发送间隔 validateFields() :验证数据合法性
Après avoir réussi la vérification, utilisez requestVerifySms() pour envoyer le code de vérification.
Le code spécifique est le suivant :
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']); } }
Module de vérification
Lors de la connexion, vous devrez peut-être vérifier votre numéro de téléphone portable et votre code de vérification. Par conséquent, la fonction de vérification du code de vérification doit être ajoutée à SmsCodeUtil.php. Le code a été donné sur le Github officiel ici et peut être légèrement modifié.
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)); } }
Tests fonctionnels
Ensuite, configurer le dispositif de routage et de contrôle et testez si la fonction est normale.
peut être ouvert en même temps host-domain/laravel-sms/info
pour afficher le code de vérification de l'envoi de SMS et l'état de vérification.
Si la journalisation de la base de données est activée, vous pouvez afficher des informations détaillées sur les résultats de l'envoi de SMS dans la table laravel_sms.
Ajoutez d'abord 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');
Ajoutez ensuite LoginController.php :
use App\Utils\SmsCodeUtil; class LoginController extends Controller { use SmsCodeUtil; ... } use App\Utils\SmsCodeUtil; class LoginController extends Controller { use SmsCodeUtil; ... }
Utilisez ensuite Postman ou d'autres outils similaires pour tester la fonctionnalité de l'API.
Envoyer le code de vérification
POST 服务器地址/api/auth/send-sms-code { "phone_number": "手机号" } POST 服务器地址/api/auth/send-sms-code { "phone_number": "手机号" }
Si vérifié et envoyé Si réussi, il reviendra :
{ "message": "短信验证码发送成功,请注意查收", "status_code": 200 } { "message": "短信验证码发送成功,请注意查收", "status_code": 200 }
Le numéro de téléphone portable renseigné en même temps recevra le code de vérification.
Si la vérification échoue ou l'envoi échoue, le message d'erreur correspondant sera renvoyé.
Code de vérification de vérification
POST 服务器地址/api/auth/validate-sms-code { "phone_number": "手机号", "sms_code": "验证码" } POST 服务器地址/api/auth/validate-sms-code { "phone_number": "手机号", "sms_code": "验证码" }
Si la vérification est réussie , Il n'y a pas de retour.
Si la vérification échoue, le message d'erreur correspondant sera renvoyé.
Langage des informations d'invite localisées
Fournit la personnalisation de certaines informations d'invite dans laravel-sms.php. Si vous souhaitez convertir les informations d'invite restantes dans la langue locale, vous devez les gérer séparément.
Assurez-vous d’abord que le paramètre de langue dans config/app.php est correct. Ceci est défini sur 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 相关地址,可以看到对应的提示信息语言已经本地化。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Laravel5.2使用Captcha生成验证码实现登录的方法
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!