Laravel 6: сброс пароля дроссельной заслонки

В laravel 6 у брокера паролей теперь есть следующее для ограничения сброса пароля (https://github.com/laravel/framework/blob/6.x/src/Illuminate/Auth/Passwords/PasswordBroker.php#L58)

public function sendResetLink(array $credentials)
{
    // First we will check to see if we found a user at the given credentials and
    // if we did not we will redirect back to this current URI with a piece of
    // "flash" data in the session to indicate to the developers the errors.
    $user = $this->getUser($credentials);

    if (is_null($user)) {
        return static::INVALID_USER;
    }

    if (method_exists($this->tokens, 'recentlyCreatedToken') &&
        $this->tokens->recentlyCreatedToken($user)) {
        return static::RESET_THROTTLED;
    }

    // Once we have the reset token, we are ready to send the message out to this
    // user with a link to reset their password. We will then redirect back to
    // the current URI having nothing set in the session to indicate errors.
    $user->sendPasswordResetNotification(
        $this->tokens->create($user)
    );

    return static::RESET_LINK_SENT;
}

Однако, когда я неоднократно отправляю сброс пароля, почему сброс пароля не регулируется - я все еще получаю уведомления о сбросе?

Я заметил, что метод recentlyCreatedToken не существует в TokenRepositoryInterface в версии 6.x https://github.com/laravel/framework/blob/6.x/src/Illuminate/Auth/Passwords/TokenRepositoryInterface.php

Но был добавлен в версии 7.x

https://github.com/laravel/framework/blob/master/src/Illuminate/Auth/Passwords/TokenRepositoryInterface.php

Это только функция v7.x или мне нужно что-то сделать, что я упускаю?


person adam78    schedule 17.02.2020    source источник


Ответы (1)


Регулировка сброса пароля работает в Laravel 6.x, но по какой-то причине вам нужно вручную установить параметр throttle в файле конфигурации config/auth.php:

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60, // Allows a user to request 1 token per 60 seconds
        ],
    ],

DatabaseTokenRepository определяет значение по умолчанию для времени газа до 60 секунд. Но когда DatabaseTokenRepository инициализируется в PasswordBrokerManager он проверяет файл конфигурации и, если значение не найдено, устанавливает время дросселя в 0 (означает отключение дросселя).

Также вам нужно добавить строку сообщения в resources/lang/en/passwords.php, чтобы показать пользователю понятное сообщение об ошибке:

'throttled' => 'You have requested password reset recently, please check your email.',

P. S. Не забудьте очистить кэш конфигурации после редактирования файла конфигурации с помощью php artisan config:clear.

person Snaker    schedule 20.02.2020