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。 AppServiceProviderAuthServiceProvider:

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 Fortify 登录后重定向,但不登录用户

使用 Laravel Livewire 和 Laravel Fortify 进行登录

混合清单不存在 - 在 Hostgator 共享主机中部署 laravel 时 Laravel Fortify Jetstream 登录/注册问题

Laravel Fortify 自定义身份验证重定向

Laravel 8 Jetstream如何在重置密码后将用户重定向到自定义路由

Laravel 8:为啥登录刀片不显示 Javascript 警报 [关闭]