Laravel 5如果密码重置令牌已过期,如何检查密码重置令牌

时间:2015-10-06 11:33:25

标签: php laravel laravel-5

我正在使用Laravel 5开发一个Web应用程序,我使用了Laravel的make:auth脚手架。我能够使用令牌发送密码重置链接,这在我的结束时运行良好。点击重置链接后,我有这种网址: http://example.com/password/reset/{reset_token} 。  现在,在我的auth.reset刀片文件中,我想首先检查{reset_token}是否已经过期,因为它似乎是在 config.auth.php 的60分钟到期时间,它似乎并没有自动删除过期的令牌。所以,我试图制作一个手动功能来检查重置令牌是否仍然有效:

function validateReminderToken($token)
{
    // I want to add some filter here like
    // if (tokenExpired($token)) return false;     
    $res = DB::table('password_resets')->where('token', $token)->get();
    if (empty($res)  || $res === null) {
        return false;
    }

    $res = $res[0];
    return $res->email;
}

我该怎么办?是否有一些内置的方法来检查令牌是否已过期?感谢。

4 个答案:

答案 0 :(得分:5)

使用created_at检查插入时间是否已经过了一段时间。例如,您可以这样做:

$token = DB::table('password_resets')
    ->where('token','=',$token)
    ->where('created_at','>',Carbon::now()->subHours(2))
    ->first();

然后检查令牌是否存在。

答案 1 :(得分:4)

要验证重置令牌是否已过期,只需检查Laravel功能tokenExpired ($created_at, $token)

此功能仅执行以下操作:

return Carbon::parse($createdAt)->addSeconds($this->expires)->isPast();

e.g。

$created_at = DB::table('password_resets')->first()['created_at'];
// => 2018-01-08 09:59:26

// Carbon::now();
// => 2018-01-08 11:03:05

Carbon::parse($created_at)->addSeconds(config('auth.passwords.users.expire'*60))->isPast()
// => true (with an expiration setting of 1 hour)

答案 2 :(得分:2)

On> = Laravel 5.4

$reminder = Reminder::where('email', $user->email)->first();

if (! $reminder or ! Hash::check($resetToken, $reminder->token)) {
    // Return 404, as Reminder was not found
    return $this->respondNotFound();
} 

其中Reminderpassword_resets雄辩模型(默认情况下为laravel:password_resets

答案 3 :(得分:1)

替代方式 - 是调用artisan命令auth:clear-resets