Laravel 8 Fortify登录称429个请求过多 [英] Laravel 8 Fortify login says 429 TOO MANY REQUESTS

查看:23
本文介绍了Laravel 8 Fortify登录称429个请求过多的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到与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安装上检查这一点,所以我不想在此草率下结论。

总之,长话短说:作为一种解决办法,您可以简单地为您的某些提供商注册一个费率限制器,例如AppServiceProviderAuthServiceProvider

public function boot()
{
    RateLimiter::for("login", function () {
        Limit::perMinute(5);
    });
}

编辑: 我刚刚意识到,FortifyServiceProvider类中的";login";键的速率限制器确实是由Fortify提供的。如果碰巧遇到与上面讨论的问题类似的问题,请确保将FortifyServiceProvider类添加到config/app.php中的providers数组中。

这篇关于Laravel 8 Fortify登录称429个请求过多的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆