Laravel Change Password Reset Длительность токена для определенных токенов - PullRequest
0 голосов
/ 26 апреля 2019

В моем приложении пользователи будут создавать свои учетные записи для других людей, поэтому я хочу отправить им электронное письмо для сброса пароля, чтобы они могли установить свой пароль и войти в систему. Проблема в том, что я не хочу этих ссылокистекает через 60 минут, как электронные письма для сброса пароля по умолчанию.Теперь я могу изменить время истечения, но я хочу, чтобы обычная переустановка пароля оставалась на 60 минутах, но приветственная ссылка по электронной почте либо никогда не истекает, либо истекает через некоторое время.

Как мне поступить?это без реализации второй системы токенов, я не могу найти ничего об этом.

Полагаю, я мог бы просто позволить пользователю повторно отправить приветственное письмо, если срок действия его токена истекает, но этораздражает.

1 Ответ

0 голосов
/ 26 апреля 2019

Срок действия определяется в auth.php. Вы можете просто определить другую конфигурацию с другим временем истечения:

'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'users_welcome' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 120,
    ],
],

И когда вы генерируете почту, вы можете использовать этого нового брокера:

\Illuminate\Support\Facades\Password::broker('users_welcome')->sendResetLink($user->email);

Чтобы проверить, не истек ли токен, Laravel использует created_at сброса и определенную продолжительность истечения:

    /**
     * Determine if the token has expired.
     *
     * @param  string  $createdAt
     * @return bool
     */
    protected function tokenExpired($createdAt)
    {
        return Carbon::parse($createdAt)->addSeconds($this->expires)->isPast();
    }

https://github.com/laravel/framework/blob/5.8/src/Illuminate/Auth/Passwords/DatabaseTokenRepository.php#L139

...