Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie Laravel SMS, um die Funktion zum Senden eines SMS-Bestätigungscodes zur Überprüfung zu erstellen

Verwenden Sie Laravel SMS, um die Funktion zum Senden eines SMS-Bestätigungscodes zur Überprüfung zu erstellen

不言
不言Original
2018-06-13 14:22:172179Durchsuche

Dieser Artikel stellt Ihnen die Verwendung von Laravel-SMS zum Erstellen eines Verifizierungsmoduls für SMS-Verifizierung vor. Es ist sehr gut und hat Referenzwert.

Laravel implementiert die SMS-Bestätigungscode-Funktion. Bei der Suche nach Informationen habe ich zwei beliebte Pakete gefunden:

Eines ist die Laravel-SMS-Adresse https://github.com/toplan/laravel-sms

Eine davon ist die einfache SMS-Adresse https://github.com/overtrue/easy-sms.

Das Projekt muss eine Funktion zum Senden und Überprüfen von SMS-Bestätigungscodes implementieren. Die vorherige Methode war etwas umständlich. Nach Ratschlägen von Experten habe ich herausgefunden, dass stattdessen das Paket laravel-sms verwendet werden kann. Es ist einfach zu konfigurieren und zu verwenden. Daher dieses Beispiel.

In diesem Beispiel werden Laravel 5.5, Api Starter Kit und Laravel Sms 2.6 verwendet.

Der in diesem Beispiel verwendete SMS-Dienstanbieter ist Yunpian.

Installieren

Im Projektstammverzeichnis ausführen (empfohlen):

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

Sie können auch Folgendes hinzufügen:

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

im Anforderungsfeld von Composer.json und es dann im Projektstammverzeichnis ausführen:

composer update
composer update

Fügen Sie:

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

zum Provider-Array von config/app.php hinzu und fügen Sie hinzu: zu das Aliase-Array:

'PhpSms' => Toplan\PhpSms\Facades\Sms::class,
'SmsManager' => Toplan\Sms\Facades\SmsManager::class,
'PhpSms' => Toplan\PhpSms\Facades\Sms::class,
'SmsManager' => Toplan\Sms\Facades\SmsManager::class,

Im Projektstammverzeichnis ausführen:

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"

wird Im Konfigurationsordner werden zwei Konfigurationsdateien generiert: phpsms.php und laravel-sms.php.

Proxy-Informationen und ein ausgewogener Planungsplan können in phpsms.php konfiguriert werden.

Das Sende- und Verifizierungsschema für den Bestätigungscode kann in laravel-sms.php konfiguriert werden.

Gleichzeitig wird die Datei 2015_12_21_111514_create_sms_table.php nach Databasemigrations kopiert. Wird zum Generieren der laravel_sms-Tabelle verwendet.

Konfiguration

Hier nehmen wir nur Wolkenschnitte als Beispiel.

phpsms.php konfigurieren

Legen Sie die Proxy-Informationen des Cloud-Slice im Agnets-Array in phpsms.php fest.

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

Legen Sie das Schema-Array fest und konfigurieren Sie das ausgewogene Planungsschema.

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

Laravel-sms.php konfigurieren

Eingebautes Routing festlegen.

'route' => [
 'enable'  => true,
 'prefix'  => 'laravel-sms', 
 'middleware' => ['api'],
],
'route' => [
 'enable'  => true,
 'prefix'  => 'laravel-sms', 
 'middleware' => ['api'],
],

Stellen Sie das Anforderungsintervall in Sekunden ein.

'interval' => 60,
'interval' => 60,

Regeln zur Nummernüberprüfung festlegen.

'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',
 ],
 ],
],

Bestätigungscode-Regeln festlegen.

'code' => [
 'length'  => 4, //验证码长度
 'validMinutes' => 10, //验证码有效时间长度,单位为分钟
 'repeatIfValid' => true, //验证码有效期内是否重复使用
 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用
],
'code' => [
 'length'  => 4, //验证码长度
 'validMinutes' => 10, //验证码有效时间长度,单位为分钟
 'repeatIfValid' => true, //验证码有效期内是否重复使用
 'maxAttempts' => 0, //验证码最大尝试验证次数,0 或负数则不启用
],

Bestätigungscode-Inhalts-SMS festlegen.

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

Bei Bedarf können Sie die Datenbankprotokollierung aktivieren. Sie müssen vorab PHP artisan migrate ausführen, um die Tabelle laravel_sms zu generieren.

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

API-Implementierung

Erstellen Sie eine neue SmsCodeUtil.php unter app/Utils, und Implementieren Sie die darin enthaltenen Funktionen zum Senden und Verifizieren des Bestätigungscodes. Auf diese Weise können jederzeit andere Klassen aufgerufen werden, was die Wiederverwendbarkeit des Codes verbessert.

Sendemodul

Die Mobiltelefonnummer muss vor dem Senden überprüft werden, einschließlich:

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

Nach bestandener Verifizierung verwenden Sie requestVerifySms(), um den Verifizierungscode zu senden.

Der spezifische Code lautet wie folgt:

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']);
 }
}

Verifizierungsmodul

Beim Anmelden müssen Sie möglicherweise Ihre Mobiltelefonnummer und Ihren Bestätigungscode bestätigen. Daher muss die Verifizierungsfunktion für den Verifizierungscode zu SmsCodeUtil.php hinzugefügt werden. Der Code wurde hier auf dem offiziellen Github bereitgestellt und kann leicht geändert werden.

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));
 }
}

Funktionstest

Als nächstes konfigurieren Sie das Routing und den Controller, Test ob die Funktion normal ist.

Sie können host-domain/laravel-sms/info gleichzeitig öffnen, um den SMS-Versand des Bestätigungscodes und den Bestätigungsstatus anzuzeigen.

Wenn die Datenbankprotokollierung aktiviert ist, können Sie detaillierte Informationen zu den SMS-Versandergebnissen in der Tabelle laravel_sms anzeigen.

Zuerst api.php hinzufügen:

$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');

Dann LoginController.php hinzufügen:

use App\Utils\SmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 ...
}
use App\Utils\SmsCodeUtil;
class LoginController extends Controller {
 use SmsCodeUtil;
 
 ...
}

Verwenden Sie dann Postman oder andere ähnliche Tools, um die API-Funktionalität zu testen.

Bestätigungscode senden

POST 服务器地址/api/auth/send-sms-code
{
  "phone_number": "手机号"
}
POST 服务器地址/api/auth/send-sms-code
{
  "phone_number": "手机号"
}

Wenn er erfolgreich verifiziert und gesendet wurde , Es wird zurückgegeben:

{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}
{
  "message": "短信验证码发送成功,请注意查收",
  "status_code": 200
}

Die gleichzeitig eingegebene Telefonnummer erhält den Bestätigungscode.

Wenn die Überprüfung fehlschlägt oder das Senden fehlschlägt, wird die entsprechende Fehlermeldung zurückgegeben.

Bestätigungscode für die Verifizierung

POST 服务器地址/api/auth/validate-sms-code
{
  "phone_number": "手机号",
  "sms_code": "验证码"
}

POST 服务器地址/api/auth/validate-sms-code
{
  "phone_number": "手机号",
  "sms_code": "验证码"
}

Wenn die Verifizierung bestanden ist, dann keiner kehrt zurück.

Wenn die Überprüfung fehlschlägt, wird die entsprechende Fehlermeldung zurückgegeben.

Lokalisierte Eingabeaufforderungsinformationssprache

Ermöglicht die Anpassung einiger Eingabeaufforderungsinformationen in laravel-sms.php. Wenn Sie die restlichen Eingabeaufforderungsinformationen in die Landessprache konvertieren möchten, müssen Sie diese separat behandeln.

Stellen Sie zunächst sicher, dass die Spracheinstellung in config/app.php korrekt ist. Dies ist auf zh_cn eingestellt.

'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中文网!

相关推荐:

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

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

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

Das obige ist der detaillierte Inhalt vonVerwenden Sie Laravel SMS, um die Funktion zum Senden eines SMS-Bestätigungscodes zur Überprüfung zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn