Laravel。超过限制限制后,如何暂停用户请求更长的时间?

时间:2018-11-12 13:20:45

标签: laravel middleware throttling

Laravel具有控制请求限制的本地能力。示例是中间件throttle:60,1,这意味着每分钟60个请求到特定路由。但是,如果超出该限制,是否有任何可以暂停请求的请求?

我需要什么? 我有2条路线:
/lock ==>这会更新带有会话标识符
的记录 /unlock ==>如果发送了正确的密码,它应该解锁,但是如果每分钟5次尝试使用无效的密码(throttle:5,1),则应将其暂停30分钟,并且每个请求应被拒绝

这是动态节流。我可以使用本地laravel功能实现它吗?

1 个答案:

答案 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,
];