【问题标题】:Laravel 9 incorrect rate limitLaravel 9 不正确的速率限制
【发布时间】:2022-06-11 05:42:05
【问题描述】:

我刚刚安装了 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) 但仍然是同样的问题。

【问题讨论】:

  • 这只发生在 Laravel 9 上吗?
  • 我有同样的问题。刚刚下载了 Laravel 8
  • 您如何将速率限制器附加到路线上?
  • 我没有将速率限制器附加到路线上。我只是按原样使用了 Fortify。限制器在FortifyServiceProvider

标签: php laravel laravel-9


【解决方案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 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');

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 2011-12-18
    • 2021-07-09
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    相关资源
    最近更新 更多