Maison développement back-end tutoriel php Utilisez Laravel SMS pour créer la fonction d'envoi du code de vérification SMS pour vérification

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

Jun 13, 2018 pm 02:22 PM
laravel sms

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Laravel - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Laravel - Personnalisations de la pagination Laravel - Personnalisations de la pagination Aug 27, 2024 am 10:51 AM

Laravel - Personnalisations de pagination - Laravel inclut une fonctionnalité de pagination qui aide un utilisateur ou un développeur à inclure une fonctionnalité de pagination. Le paginateur Laravel est intégré au générateur de requêtes et à Eloquent ORM. La méthode paginate automatique

Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Comment obtenir le code de retour lorsque l'envoi par e-mail échoue à Laravel? Apr 01, 2025 pm 02:45 PM

Méthode pour obtenir le code de retour lorsque l'envoi par e-mail de Laravel échoue. Lorsque vous utilisez Laravel pour développer des applications, vous rencontrez souvent des situations où vous devez envoyer des codes de vérification. Et en réalité ...

La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? La tâche de calendrier Laravel n'est pas exécutée: que dois-je faire si la tâche n'est pas en cours d'exécution après le calendrier: Exécuter la commande? Mar 31, 2025 pm 11:24 PM

Laravel Schedule Tâche d'exécution de dépannage non réactif Lorsque vous utilisez la planification des tâches de calendrier de Laravel, de nombreux développeurs rencontreront ce problème: Schedule: Exécuter ...

Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Dans Laravel, comment gérer la situation où les codes de vérification ne sont pas envoyés par e-mail? Mar 31, 2025 pm 11:48 PM

La méthode de traitement de l'échec de l'e-mail de Laravel à envoyer le code de vérification est d'utiliser Laravel ...

Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Comment implémenter la fonction de table personnalisée de clic pour ajouter des données dans l'administrateur DCAT? Apr 01, 2025 am 07:09 AM

Comment implémenter la fonction du tableau de Cliquez sur personnalisé pour ajouter des données dans DCATADMIN (Laravel-Admin) lors de l'utilisation de DCAT ...

Laravel - Serveur de vidage Laravel - Serveur de vidage Aug 27, 2024 am 10:51 AM

Laravel - Dump Server - Le serveur de dump Laravel est livré avec la version de Laravel 5.7. Les versions précédentes n'incluent aucun serveur de dump. Le serveur de vidage sera une dépendance de développement dans le fichier laravel/laravel composer.

Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Partage de connexion Laravel Redis: pourquoi la méthode de sélection affecte-t-elle d'autres connexions? Apr 01, 2025 am 07:45 AM

L'impact du partage des connexions redis dans Laravel Framework et sélectionnez Méthodes Lors de l'utilisation de Laravel Framework et Redis, les développeurs peuvent rencontrer un problème: grâce à la configuration ...

See all articles