Laravel 8 速率限制器不适用于路由

问题描述

在 web.PHP 路由中,我有以下内容

Route::middleware('throttle:3,1')->group(function () {
    Route::get('/about',function () {
        return "About Info";
    });
});

Laravel 框架是 8.19.0。

理想情况下,当有人在 1 分钟内点击页面超过 3 次时,laravel 应该给出 429 Too Many Attempts Response。但事实并非如此。 3 次后我没有收到 429 响应。

如何解决这个问题?

谢谢

解决方法

转到 .env 文件并检查您的缓存驱动程序,如果 CACHE_DRIVER=none,请设置缓存驱动程序。
Laravel 支持 支持:“apc”、“数组”、“数据库”、“文件”、 “memcached”、“redis”、“dynamodb”

,

我遇到了这个问题。在 config/cache.php 中,默认设置为“null”。我改为“数据库”。现在,这一切正常。

,

Laravel 8 开始,您可以在 configureRateLimiting() 的方法 App\Providers\RouteServiceProvider 中配置速率限制。

例如:

protected function configureRateLimiting()
{
    RateLimiter::for('api',function (Request $request) {
        return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
    });
}

如果您从 Laravel 7 更新,请不要忘记在 boot()RouteServiceProvider 方法中添加对方法的调用。否则将不会应用限制。

public function boot()
{
    $this->configureRateLimiting();

    parent::boot();
}

另见文档:https://laravel.com/docs/8.x/routing#rate-limiting 和 Laracasts 视频:https://laracasts.com/series/whats-new-in-laravel-8/episodes/9