devstar / laravel-otp-validate
Laravel OTP 验证包,具有内置的重试和重发机制。内置最大重试和最大重发阻塞。OTP/安全码可以通过您选择的短信或电子邮件发送,并使用用户定义的模板。
Requires
- php: ^7.1.8|^8.0
- aws/aws-sdk-php: ^3.179
- guzzlehttp/guzzle: ^7.0.1
- nesbot/carbon: ^2.22
Requires (Dev)
- orchestra/testbench: ^6.0@dev
README
此包旨在简化OTP验证流程的设置。无需烦恼,只需即插即用。按照以下步骤操作,您将能够获得一个完整的OTP验证系统。您可以将其用于后续的认证或电子商务生产销售、订单确认。
要求
安装
安装包
使用Composer安装此包
composer require devstar/laravel-otp-validate
添加服务提供者和外观
对于Laravel 5.5+
添加包后,服务提供者和外观将自动发现。
对于旧版本的Laravel
将服务提供者添加到config/app.php
中的提供者数组
Ferdous\OtpValidator\OtpValidatorServiceProvider::class
将外观添加到config/app.php
中的别名数组
'OtpValidator' => Ferdous\OtpValidator\OtpValidatorServiceProvider::class
发布配置
完成后,使用以下命令将配置发布到您的配置文件夹
php artisan vendor:publish --provider="Ferdous\OtpValidator\OtpValidatorServiceProvider"
此命令将创建一个config/otp.php
文件。
电子邮件配置
从.env
文件设置电子邮件配置。无需其他更改。
短信配置
由于短信网关使用不同的方法和额外的头信息和参数,您可能需要更新otp.php
文件中的短信配置。
迁移数据库
运行以下命令创建otps表。
php artisan migrate
它将创建一个包含所需列的otps表。
环境
将以下键值对添加到Laravel应用程序中的.env
文件
# Basic OTP Configs
OTP_SERVICE='enabled'
OTP_TABLE_NAME='otps'
OTP_TIMEOUT=120
OTP_DIGIT=5
OTP_RESEND_SERVICE='enabled'
OTP_MAX_RETRY=2
OTP_MAX_RESEND=1
# Company and Service
OTP_SERVICE_NAME=
OTP_COMPANY_NAME=
# OTP via Email / SMS
OTP_SEND_BY_EMAIL=1
OTP_SEND_BY_SMS=1
# Email Configurations
OTP_EMAIL_FROM=
OTP_EMAIL_FROM_NAME=
OTP_EMAIL_SUBJECT=
# SMS Configurations
OTP_SMSC_URL='https://sms'
OTP_SMSC_METHOD=
OTP_COUNTRY_CODE=
OTP_SMSC_OVER_JSON=
OTP_SMSC_PARAM_TO_NAME=
OTP_SMSC_PARAM_MSG_NAME=
OTP_SMSC_USER=
OTP_SMSC_PASS=
AWS_SNS_VERSION=
AWS_SNS_KEY=
AWS_SNS_SECRET=
AWS_SNS_REGION=
定义
配置中功能的定义
- service:启用/禁用OTP服务
- timeout:OTP超时
- digit:OTP位数
- resend-service:启用/禁用重发服务
- max-retry:单个请求的最大重试次数
- max-resend:单个请求的最大重发次数
- service-name:服务的使用用途
- company-name:公司的名称
- send-by:有三种方式可以共享OTP(电子邮件/短信/AWS SNS)
- email:此密钥指定电子邮件所需的信息(例如,发件人、姓名、主题等。)
- sms:使用短信网关发送短信。 (通用配置器)
在运行时定义“发送方式”
可以使用配置方法在运行时设置“发送方式”[ SMS / 电子邮件 / SNS ]。
config('otp.send-by.email', 1);
config('otp.send-by.sms', 0);
OTP请求模板
一旦模板文件发布,打开resources/views/vendor/template-otp/
示例控制器
运行以下命令创建控制器。
php artisan make:controller OtpController
以下是OtpController中调用OTP验证器的示例。
namespace App\Http\Controllers; use Ferdous\OtpValidator\Object\OtpRequestObject; use Ferdous\OtpValidator\OtpValidator; use Ferdous\OtpValidator\Object\OtpValidateRequestObject; class OtpController extends Controller { /** * @return array */ public function requestForOtp() { return OtpValidator::requestOtp( new OtpRequestObject('1432', 'buy-shirt', '01711084714', 'ferdousul.haque@gmail.com') ); } /** * @param Request $request * @return array */ public function validateOtp(Request $request) { $uniqId = $request->input('uniqueId'); $otp = $request->input('otp'); return OtpValidator::validateOtp( new OtpValidateRequestObject($uniqId,$otp) ); } /** * @param Request $request * @return array */ public function resendOtp(Request $request) { $uniqueId = $request->input('uniqueId'); return OtpValidator::resendOtp($uniqueId); } }
将以下内容添加到routes/web.php
文件。
Route::get('/test/otp-request', 'OtpController@requestForOtp');
Route::get('/test/otp-validate', 'OtpController@validateOtp');
Route::get('/test/otp-resend', 'OtpController@resendOtp');
响应/错误描述
以下表格描述了响应中生成的错误代码及其对应含义。
{ "code": 201, "message": "OTP Sent to the recipient", "uniqueId": 1432, "type": "buy-shirt" }
请求OTP响应代码
OTP验证响应代码
许可证
MIT
特别感谢
- Nahid Bin Azhar 提供反馈。
支持
- 对于任何错误,请帮助创建一个问题。
- 对于安装或配置问题,请随时联系我。 ferdousul.haque@gmail.com
特色文章
示例短信网关配置
Muthofun
如果您尝试集成孟加拉国最受欢迎的短信网关之一,muthofun是我国流行的短信群发网关。以下是Muthofun短信网关的示例配置
'smsc' => [ 'url' => env('OTP_SMSC_URL'), 'method' => env('OTP_SMSC_METHOD', 'GET'), 'add_code' => env('OTP_COUNTRY_CODE',null), 'json' => env('OTP_SMSC_OVER_JSON',1), 'headers' => [], 'params' => [ 'send_to_param_name' => env('OTP_SMSC_PARAM_TO_NAME','number'), 'msg_param_name' => env('OTP_SMSC_PARAM_MSG_NAME','msg'), 'others' => [ 'user' => env('OTP_SMSC_USER'), 'password' => env('OTP_SMSC_PASS'), 'unicode' => 1 ], ] ];
.env文件将如下所示
OTP_SMSC_URL='http://clients.muthofun.com:8901/esmsgw/sendsms.jsp?'
OTP_SMSC_METHOD='GET'
OTP_COUNTRY_CODE='88'
OTP_SMSC_OVER_JSON=0
OTP_SMSC_PARAM_TO_NAME='mobiles'
OTP_SMSC_PARAM_MSG_NAME='sms'
OTP_SMSC_USER='YourUserName'
OTP_SMSC_PASS='YourPassWord'
Infobip
以下是如何与知名短信网关Infobip SMS平台集成的示例。
使用GET方法
'smsc' => [ 'url' => env('OTP_SMSC_URL'), 'method' => env('OTP_SMSC_METHOD', 'GET'), 'add_code' => env('OTP_COUNTRY_CODE',null), 'json' => env('OTP_SMSC_OVER_JSON',1), 'headers' => [], 'params' => [ 'send_to_param_name' => env('OTP_SMSC_PARAM_TO_NAME','number'), 'msg_param_name' => env('OTP_SMSC_PARAM_MSG_NAME','msg'), 'others' => [ 'username' => env('OTP_SMSC_USER'), 'password' => env('OTP_SMSC_PASS'), 'from' => 'InfoSMS', 'flash' => true ], ] ];
.env文件将如下所示
OTP_SMSC_URL='https://{baseUrl}/sms/1/text/query?'
OTP_SMSC_METHOD='GET'
OTP_COUNTRY_CODE='88'
OTP_SMSC_OVER_JSON=0
OTP_SMSC_PARAM_TO_NAME='to'
OTP_SMSC_PARAM_MSG_NAME='text'
OTP_SMSC_USER='YourUserName'
OTP_SMSC_PASS='YourPassWord'
msg91
以下是与msg91短信网关集成的示例。
使用GET方法
'smsc' => [ 'url' => env('OTP_SMSC_URL'), 'method' => env('OTP_SMSC_METHOD', 'GET'), 'add_code' => env('OTP_COUNTRY_CODE',null), 'json' => env('OTP_SMSC_OVER_JSON',1), 'headers' => [], 'params' => [ 'send_to_param_name' => env('OTP_SMSC_PARAM_TO_NAME','number'), 'msg_param_name' => env('OTP_SMSC_PARAM_MSG_NAME','msg'), 'others' => [ 'authkey' => 'YourAuthKey', 'sender' => 'YourSenderId', 'route' => '1', 'country' => '88', ], ], 'wrapper' => 'sms', ];
.env文件将如下所示
OTP_SMSC_URL='https://control.msg91.com/api/v2/sendsms?'
OTP_SMSC_METHOD='POST'
OTP_COUNTRY_CODE='88'
OTP_SMSC_OVER_JSON=1
OTP_SMSC_PARAM_TO_NAME='to'
OTP_SMSC_PARAM_MSG_NAME='text'
OTP_SMSC_USER='YourUserName'
OTP_SMSC_PASS='YourPassWord'
使用AWS简单通知服务(SNS)
以下是与AWS SNS集成的示例步骤。
创建具有适当策略权限的IAM用户。转到IAM服务,创建您的应用程序用户;请确保捕获其AWS密钥和AWS密钥值,并将其放入环境文件中。然后,向该用户或其组添加以下策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSendingSMSMessages",
"Effect": "Allow",
"Action": [
"sns:Publish",
"sns:SetSMSAttributes",
"sns:CheckIfPhoneNumberIsOptedOut"
],
"Resource": [
"*"
]
}
]
}
在这里,我们设置发布、设置短信属性和检查退订的能力,并将此策略应用于通配符资源,而不是特定主题,因为我们将直接向电话号码发送通知,而不是向SNS主题发送。