laravel 设置以短信形式发送验证码的时间间隔,以便在注册后激活用户



如何设置用户第一次请求验证码和第二次尝试(应为 30 秒(之间的时间间隔或时差? 还有如何显示时间计数器:29:00下降到0秒?

public function sendSms($request)
{
$apiKey = config('services.smsapi.ApiKey'); 
$client = new GuzzleHttpClient();   
$endpoint = "https://www.sms123.net/api/send.php";    
try
{
$response = $client->request('GET', $endpoint, ['query' => [
'recipients' => $request->contact_number, 
'apiKey' => $apiKey,
'messageContent'=>'testSite.com verification code is '.$request->code,
]]);
$statusCode = $response->getStatusCode();
$content = $response->getBody();
$content = json_decode($response->getBody(), true);
return $content['msgCode'];
}
catch (Exception $e)
{
echo "Error: " . $e->getMessage();
}

}

值得庆幸的是,Laravel在这方面为您提供了保障。在 Laravel 中,您可以使用名为throttle的中间件实现速率限制,该中间件在 Laravel 中开箱即用。您需要将此throttle中间件分配给路由或路由组。

中间件基本上接受两个参数,特别是"请求数"和"持续时间",它决定了在给定分钟数内可以发出的最大请求数。

基本示例

您可以将throttle中间件分配给单个路由,如下所示

Route::get('admin/profile', function () {
//
})->middleware('auth', 'throttle:30,1');

如您所见,上述路由配置将允许经过身份验证的用户每分钟访问路由 30 次。如果用户在指定的时间跨度内超过此限制,Laravel将返回具有以下响应标头的429 Too Many Requests

x-ratelimit-limit: 2
x-ratelimit-remaining: 0
x-ratelimit-reset: 1566834663

然后,使用前端的 vue 或 js,您可以制作一个计数器,该计数器将开始计算所需的数字,以便用户知道他还剩下多少时间。

最新更新