我刚刚安装了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。
开发环境:拉拉顿也尝试了拉拉多克(码头),但仍然是同一个问题。
发布于 2022-06-10 21:42:05
我得到了完全相同的问题并修复了它。
在我的情况下,我更改了默认的路径名。/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(...)部件,并打破了配置中的键。
https://stackoverflow.com/questions/71076752
复制相似问题