【问题标题】:Laravel. How to suspend user requests for a longer time after throttling limit is exceeded?拉拉维尔。超过限制后如何暂停用户请求更长时间?
【发布时间】:2019-04-15 05:28:26
【问题描述】:

Laravel 具有控制请求限制的本机能力。例如中间件throttle:60,1,这意味着每分钟60个请求到特定路由。但是如果超过这个限制,有什么可以暂停请求吗?

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

这里我们有动态限制。我可以使用原生 laravel 功能实现它吗?

【问题讨论】:

    标签: laravel middleware throttling


    【解决方案1】:

    你可以通过扩展原来的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,
    ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      相关资源
      最近更新 更多