web-dev-qa-db-ja.com

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メソッドがバージョン6.xのTokenRepositoryInterfaceに存在しないことに気づきました 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の機能だけですか、それとも欠落していることを実行する必要がありますか?

2
adam78

パスワードリセットスロットリングはLaravel 6.xで機能しますが、何らかの理由で設定ファイルconfig/auth.phpthrottleパラメータを手動で設定する必要があります:

    '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を使用して構成ファイルを編集した後、構成キャッシュをフラッシュすることを忘れないでください。

4
Snaker