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

问题描述 投票:1回答:1

我正在使用Throttling,我注意到你可以在特定的时间内允许数量请求,但我正在尝试做一些不同的事情

如果我设置Throttling 60:1

所以每分钟允许发送60个请求

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

就好像用户在一分钟内提出60请求然后阻止他30分钟

php laravel laravel-5.6
1个回答
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中的日期时间将大于当前时间,并且在这种情况下您可以阻止他。

更新

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

希望这对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.