Utilisez Laravel SMS pour créer la fonction d'envoi du code de vérification SMS pour vérification

不言
Libérer: 2023-03-31 22:42:01
original
2183 Les gens l'ont consulté

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
Copier après la connexion

Vous pouvez également ajouter dans le champ require de composer.json :

"toplan/laravel-sms": "2.6"
"toplan/laravel-sms": "2.6"
Copier après la connexion

puis l'exécuter dans le répertoire racine du projet :

composer update
composer update
Copier après la connexion

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,
Copier après la connexion

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,
Copier après la connexion

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"
Copier après la connexion

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',
],
Copier après la connexion

Définissez le tableau de schémas et configurez le schéma de planification équilibré.

'scheme' => [
 'YunPian',
],
'scheme' => [
 'YunPian',
],
Copier après la connexion

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'],
],
Copier après la connexion

Définissez l'intervalle de requête en secondes.

'interval' => 60,
'interval' => 60,
Copier après la connexion

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',
 ],
 ],
],
Copier après la connexion

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 或负数则不启用
],
Copier après la connexion

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}分钟内有效,如非本人操作,请忽略)";
},
Copier après la connexion

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',
Copier après la connexion

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() :验证数据合法性
Copier après la connexion

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']);
 }
}
Copier après la connexion

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));
 }
}
Copier après la connexion

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');
Copier après la connexion

Ajoutez ensuite LoginController.php :

use App\Utils\SmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 ...
}
use App\Utils\SmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 
 ...
}
Copier après la connexion

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": "手机号"
}
Copier après la connexion

Si vérifié et envoyé Si réussi, il reviendra :

{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}
{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}
Copier après la connexion

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": "验证码"
}
Copier après la connexion

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',
Copier après la connexion

然后在 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'  => '验证码',
 ],
];
Copier après la connexion

重新 POST 相关地址,可以看到对应的提示信息语言已经本地化。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

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

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

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

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal