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(...)часть и сломал ключи от конфига.

Другие вопросы по тегам