Laravel 8 Fortify 登录显示 429 太多请求
Posted
技术标签:
【中文标题】Laravel 8 Fortify 登录显示 429 太多请求【英文标题】:Laravel 8 Fortify login says 429 TOO MANY REQUESTS 【发布时间】:2021-05-06 22:33:13 【问题描述】:我遇到了与 429 TOO MANY REQUESTS 相关的问题。我用过 Laravel fortify,我的网络路由就像
Route::get('/', function ()
return view('welcome');
);
Route::get('/dashboard','DashboardController@dashboardView')
->name('dashboard')->middleware('auth');
问题间歇性出现,成功登录后,如果我立即退出并立即尝试登录,我会重定向到仪表板,它会给出 429 TOO MANY REQUESTS 并且地址栏中的 URL 是 http://127.0.0.1:8000/login。现在,如果我在那里等待一秒钟并刷新页面,它会重定向到仪表板页面。
我在网上搜索过,每个人都在说油门,我不认为这是解决方案。请帮我。 谢谢。
【问题讨论】:
【参考方案1】:我今天偶然发现了同样的问题并进行了一些调试。注册 /login 路由时,Fortify 将 Illuminate\Routing\Middleware\ThrottleRequests:login
中间件应用到它。这意味着,对于对该路由的每个请求,ThrottleRequests
中间件将为该指定键调用 RateLimiter
实例。显然,Fortify 没有为 login
键注册 RateLimiter
。
由于RateLimiter
实例的$limiters
属性中缺少键,ThrottleRequests
中间件使用其默认的回退,它不处理边缘情况“应该是该键的速率限制器,但没有。”真的很好。 $maxAttempts
变量设置为 0,将导致不稳定的速率限制行为。
我觉得这是 Fortify 中的一个错误,因为速率限制也发生在 \Laravel\Fortify\Actions\EnsureLoginIsNotThrottled
操作中,该操作在 \Laravel\Fortify\Http\Controllers\AuthenticatedSessionController
控制器中调用。不过,我没有在全新的 Laravel 安装中检查这一点,所以我不想在这里草率下结论。
无论如何,长话短说:作为一种解决方法,您可以简单地在某些提供商中为“登录”键注册一个速率限制器,例如。 G。 AppServiceProvider
或 AuthServiceProvider
:
public function boot()
RateLimiter::for("login", function ()
Limit::perMinute(5);
);
编辑:
我刚刚意识到“登录”键的速率限制器确实是由 Fortify 在 FortifyServiceProvider
类中提供的。如果您碰巧遇到与上述问题类似的问题,请确保将 FortifyServiceProvider
类添加到 config/app.php
中的 providers
数组中。
【讨论】:
感谢您的宝贵回复,我已经在 FortifyServiceProvider 类中解决了这个问题。在 boot 方法之前调用登录视图。 Fortify::loginView(function () Artisan::call('cache:clear'); return view('forepart.login.user_login'); ); 虽然这可行,但在每次用户登录时破坏缓存可能不是最好的方法。 @ChrisMeh 你真棒兄弟!非常感谢!我的用户在输入登录信息后实际上报告了生产中的 429 错误!我觉得它至少应该给你 5 次机会。补充一点,FortifyServiceProvider
中定义的登录密钥默认使用email
,如果你和我一样不使用email
字段,你应该改变它。【参考方案2】:
去
app/http/kernel.php
并从routeMiddleware
列表中删除该行
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于Laravel 8 Fortify 登录显示 429 太多请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel Livewire 和 Laravel Fortify 进行登录
混合清单不存在 - 在 Hostgator 共享主机中部署 laravel 时 Laravel Fortify Jetstream 登录/注册问题