Laravel具有控制请求限制的本地能力。示例是中间件throttle:60,1
,这意味着每分钟60个请求到特定路由。但是,如果超出该限制,是否有任何可以暂停请求的请求?
我需要什么?
我有2条路线:
/lock
==>这会更新带有会话标识符
的记录
/unlock
==>如果发送了正确的密码,它应该解锁,但是如果每分钟5次尝试使用无效的密码(throttle:5,1
),则应将其暂停30分钟,并且每个请求应被拒绝
这是动态节流。我可以使用本地laravel功能实现它吗?
答案 0 :(得分:2)
您可以通过扩展原始的ThrottleRequests
中间件来完成所需的逻辑:
<?php
namespace App\Http\Middleware;
use Closure;
class ThrottleRequests extends \Illuminate\Routing\Middleware\ThrottleRequests
{
public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 2)
{
$original = parent::handle($request, $next, $maxAttempts, $decayMinutes);
if ($this->limiter->tooManyAttempts($key, $maxAttempts, $decayMinutes)) {
// Do whatever you need to...
}
return $next($request);
}
}
然后编辑您的 App \ Http \ Kernel.php ,以使用自定义的ThrottleRequests中间件:
protected $routeMiddleware = [
'throttle' => \App\Http\Middleware\ThrottleRequests::class,
];