多用户发送验证码发送时间冲突
curder opened this issue · 5 comments
curder commented
问题:
多用户发送验证码时,提示“请求无效,请在60秒后重试”。
具体表现:
先访问的用户可以正常发送验证码,较不理想的情况下后访问的用户必须等待最多60秒的时间。
打开源码SmsManager.php
发现:
当用户发送验证码的时候,使用cache
驱动时的 *._can_resend_until
和 *._state
这两个key会被占用。
这个问题是故意这么设计么?是不是可以将用户的手机号码也存到缓存key中,来防止这种情况呢?
kerwin-cn commented
现在我遇到同样问题
curder commented
kerwin-cn commented
感谢!!!感谢
hwbrzzl commented
感谢!好坑。request()->headers->set('access-token', $phone);
curder commented
建议也可以添加一个中间件,比如这里的 SmsAccessToken.php
,
- 中间件定义:
<?php
namespace App\Http\Middleware;
use Closure;
class SmsAccessToken
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->has('phone')) { // 根据前端传的字段自定义配置
$request->headers->set('access-token', $request->input('phone'));
}
return $next($request);
}
}
- 定义中间件别名
在app/Http/Kernel.php
文件的 $routeMiddleware
数组中添加如下配置:
'sms_access_token' => \App\Http\Middleware\SmsAccessToken::class
- 路由中使用中间件
Route::post('by-sms/send-code', 'RegisterController@sendSmsCode')->middleware(['sms_access_token']); // 发送短信验证码
Route::post('by-sms', 'RegisterController@smsStore')->middleware(['sms_access_token']); // 短信注册「需要验证手机号」