繁体   English   中英

如何在 Laravel 中限制每天的速率?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM