[英]Laravel 9 incorrect rate limit
我剛剛安裝了 Laravel 9 和 Laravel Fortify。 但是,登錄功能的速率限制不正確。
FortifyServiceProvider.php
public function boot()
{
Fortify::createUsersUsing(CreateNewUser::class);
Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
RateLimiter::for('login', function (Request $request) {
$email = (string) $request->email;
return Limit::perMinute(5)->by($email.$request->ip());
});
RateLimiter::for('two-factor', function (Request $request) {
return Limit::perMinute(5)->by($request->session()->get('login.id'));
});
}
如您所見,它每分鍾顯示五個請求。 但是,每當我在第一次請求后嘗試錯誤登錄時,它一直給我一個錯誤429: Too Many Requests
。 這是因為它只允許我登錄一次。
我嘗試了兩個 PHP 版本,8.0 和 8.1.2。
更新:
我還嘗試了 Laravel v8。
開發環境:Laragon 也嘗試過使用 Laradock (docker) 但仍然是同樣的問題。
我遇到了同樣的問題並修復了它。
在我的情況下,我更改了默認路由名稱。 /login
變成/sign-up
和/two-factor
變成/account-two-factor
。
所以我更改了FortifyServiceProvider.php文件中的速率限制器名稱。
RateLimiter::for('sign-in', function (Request $request) {
$email = (string) $request->email;
error_log($email.$request->ip());
return Limit::perMinute(50)->by($email.$request->ip());
});
RateLimiter::for('account-two-factor', function (Request $request) {
return Limit::perMinute(50)->by($request->session()->get('login.id'));
});
我需要更改config/fortify.php limiters
數組
'limiters' => [
'login' => 'login',
'two-factor' => 'two-factor',
],
至
'limiters' => [
'sign-in' => 'sign-in',
'account-two-factor' => 'account-two-factor',
],
並更改我在routes/fortify.php中的自定義路由名稱
$limiter = config('fortify.limiters.login');
$twoFactorLimiter = config('fortify.limiters.two-factor');
至
$limiter = config('fortify.limiters.sign-in');
$twoFactorLimiter = config('fortify.limiters.account-two-factor');
我的收獲是默認值應該開箱即用,我的錯誤是我重命名了RateLimiter::for(...)
部分並破壞了配置中的密鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.