Laravel 8 Fortify登录称429个请求过多 [英] Laravel 8 Fortify login says 429 TOO MANY REQUESTS
问题描述
我遇到与429个过多请求相关的问题。我使用过Laravel Fortify,我的Web路径如下
Route::get('/', function () {
return view('welcome');
});
Route::get('/dashboard','DashboardController@dashboardView')
->name('dashboard')->middleware('auth');
问题间歇性地出现,成功登录后,如果我立即点击注销并立即尝试登录,我会重定向到仪表板。它发出了429个过多的请求,地址栏中的URL是http://127.0.0.1:8000/login。现在,如果我在那里等待一秒钟并刷新页面,它将重定向到仪表板页面。
我在网上搜索过,每个人都在谈论油门,我不认为这是解决方案。请帮帮我。 谢谢。
推荐答案
我今天碰巧遇到了同样的问题,做了一些调试。在注册/login路由时,Fortify会对其应用IlluminateRoutingMiddlewareThrottleRequests:login
中间件。这意味着,对于该路由的每个请求,ThrottleRequests
中间件将调用该指定键的RateLimiter
实例。显然,Fortify不会为login
项注册RateLimiter
。
由于RateLimiter
实例的$limiters
属性中缺少键,ThrottleRequests
中间件使用其默认的后备,它不处理边缘情况&应该有该键的速率限制器,但实际上没有。$maxAttempts
变量设置为0,将导致不稳定的速率限制行为。
我觉得这是Fortify中的错误,因为LaravelFortifyActionsEnsureLoginIsNotThrottled
操作中也发生了速率限制,该操作在LaravelFortifyHttpControllersAuthenticatedSessionController
控制器中调用。不过,我没有在全新的Laravel安装上检查这一点,所以我不想在此草率下结论。
总之,长话短说:作为一种解决办法,您可以简单地为您的某些提供商注册一个费率限制器,例如AppServiceProvider
或AuthServiceProvider
:
public function boot()
{
RateLimiter::for("login", function () {
Limit::perMinute(5);
});
}
编辑:
我刚刚意识到,FortifyServiceProvider
类中的";login";键的速率限制器确实是由Fortify提供的。如果碰巧遇到与上面讨论的问题类似的问题,请确保将FortifyServiceProvider
类添加到config/app.php
中的providers
数组中。
这篇关于Laravel 8 Fortify登录称429个请求过多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!