首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 9错误的利率限制

Laravel 9错误的利率限制
EN

Stack Overflow用户
提问于 2022-02-11 07:55:22
回答 1查看 370关注 0票数 3

我刚刚安装了Laravel 9和Laravel Fortify。但是,登录函数的速率限制是不正确的。

FortifyServiceProvider.php

代码语言:javascript
运行
复制
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。

开发环境:拉拉顿也尝试了拉拉多克(码头),但仍然是同一个问题。

EN

Stack Overflow用户

发布于 2022-06-10 21:42:05

我得到了完全相同的问题并修复了它。

在我的情况下,我更改了默认的路径名。/login变成了/sign-up/two-factor变成了/account-two-factor

因此,我在FortifyServiceProvider.php文件中更改了速率限制器的名称。

代码语言:javascript
运行
复制
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数组从

代码语言:javascript
运行
复制
'limiters' => [
        'login' => 'login',
        'two-factor' => 'two-factor',

    ],

代码语言:javascript
运行
复制
'limiters' => [
        'sign-in' => 'sign-in',
        'account-two-factor' => 'account-two-factor',

    ],

并将我在routes/fortify.php中的自定义路由名称更改为

代码语言:javascript
运行
复制
$limiter = config('fortify.limiters.login');
$twoFactorLimiter = config('fortify.limiters.two-factor');

代码语言:javascript
运行
复制
$limiter = config('fortify.limiters.sign-in');
$twoFactorLimiter = config('fortify.limiters.account-two-factor');

我的做法是,缺省值应该是开箱即用的,而我的错误是重新命名了RateLimiter::for(...)部件,并打破了配置中的键。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71076752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档