[英]How to rate limit per day in Laravel?
我想每天而不是每分钟限制速率。 我该怎么做?
if (RateLimiter::remaining('send-message:'.$user->id, $perMinute = 5)) {
RateLimiter::hit('send-message:'.$user->id);
// Send message...
}
只需在configureRateLimiting
函数内的app\Providers\RouteServiceProvider.php
中添加另一个限制器
像这样;
protected function configureRateLimiting() {
//Default Limiter
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
//Your Limiter - limit 10 request per day
RateLimiter::for('day', function (Request $request) {
return Limit::perDay(10)->by(optional($request->user())->id ?: $request->ip());
});
}
然后你可以在中间件中使用它来实现throttle
例如
// on group routes
Route::group(['middleware' => 'throttle:day'], function () {
Route::get('/limit-test', function( \Illuminate\Http\Request $request) {
return $request;
})->name('rate.test');
});
// with single route
Route::get('/limit-test', function( \Illuminate\Http\Request $request) {
return Illuminate\Support\Facades\RateLimiter::remaining( $request->ip, 10);
return $request;
})->middleware('throttle:day');
//or inside a controller
public function __construct() {
//All methods
$this->middleware('throttle:day');
// or on specific method
//$this->middleware('throttle:day')->only('whatEverFunction');
// or all method except
//$this->middleware('throttle:day')->except('whatEverFunction');
}
如果您检查响应标头,您应该能够看到
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 9
你可以使用这个代码
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
});
我认为在你的情况下你可以这样做:
$success = RateLimiter::attempt('send-message:'.$user->id, $maxAttempts, function () {
// Send message
}, 1440);
if (!$success) {
// Rate limit hit..
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.