如果用户在一分钟内超出节流限制,则将用户阻止半小时(Laravel 5.6)

时间:2018-09-14 07:44:29

标签: php laravel laravel-5.6

我正在使用节流功能,我注意到您可以允许每指定时间的数量请求,但是我正在尝试做一些不同的事情

如果我将节流设置为60:1

因此允许每1分钟发送60个请求

但是有可能像这样节流60:1:30

就像用户在一分钟内发出60个请求,然后阻止他30分钟

1 个答案:

答案 0 :(得分:0)

定制油门中间件

如果我们希望将其限制为每分钟5次尝试。

Route::group(['prefix' => 'api', 'middleware' => 'throttle:5'], function () {
    Route::get('people', function () {
        return Person::all();
    });
});

如果我们要更改它,以使如果有人超过了极限,他们将无法再尝试10分钟。

Route::group(['prefix' => 'api', 'middleware' => 'throttle:5,10'], function ()     {
    Route::get('people', function () {
        return Person::all();
    });
});

更新

您需要在db banned_at中添加日期时间标记,并在达到速率限制时进行设置。通过将当前日期时间加上30分钟来设置该日期时间,并在用户借助中间件访问路由时进行比较。当用户在达到速率限制的30分钟内访问时,db banned_at中的日期时间将大于当前时间,在这种情况下,您可以阻止他。

更新

还有另一种方法,看看是否可以在https://github.com/laravel/framework/blob/5.3/src/Illuminate/Cache/RateLimiter.php#L38的RateLimiter类中设置$ key变量,我找不到设置它的方法

希望这对您有所帮助。