Laravel 9 неверный лимит скорости
Я только что установил 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'));
});
}
Как видите, он показывает пять запросов в минуту. Однако всякий раз, когда я пытался войти в систему неправильно после первого запроса, он продолжал выдавать мне ошибку
Я пробовал обе версии PHP, 8.0 и 8.1.2.
Обновлять:
Я также пробовал Laravel v8.
Среда разработки: Ларагон также пытался использовать Ларадок (докер), но все равно та же проблема.
1 ответ
Я получил точно такую же проблему и исправил ее.
В моей ситуации я изменил имена маршрутов по умолчанию./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',
],
а также изменить имена моих пользовательских маршрутов, которые у меня есть в route/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(...)
часть и сломал ключи от конфига.