Laravel更改特定令牌的密码重置令牌持续时间

时间:2019-04-26 14:15:32

标签: laravel laravel-5 laravel-authorization

在我的应用程序中,用户的帐户将由其他人为其创建,因此我想向他们发送密码重置电子邮件,以便他们可以设置其密码并登录。问题是我不希望这些链接会在60分钟后过期,例如默认的密码重置电子邮件。现在,我可以更改到期时间,但是我希望将常规密码重置保持在60分钟,但是欢迎电子邮件链接要么永不过期,要么经过很长一段时间才会过期。

如何在不实施第二个令牌系统的情况下进行此操作,我似乎对此一无所获。

我想我也可以允许用户在令牌过期时重新发送欢迎电子邮件,但这很烦人。

1 个答案:

答案 0 :(得分:0)

有效期限在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