Dex*_*gil 4 php laravel laravel-5
我正在使用Laravel 5开发一个Web应用程序,我使用了Laravel的make:auth脚手架.我能够使用令牌发送密码重置链接,这在我的结束时运行良好.点击重置链接后,我有这种网址:http://example.com/password/reset/{reset_token}.现在,在我的auth.reset刀片文件中,我想首先检查是否{reset_token}已经过期,因为它似乎在60分钟的到期时间内config.auth.php,它似乎不会自动删除过期的令牌.所以,我正在尝试制作一个手动功能来检查重置令牌是否仍然有效:
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;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?是否有一些内置的方法来检查令牌是否已过期?谢谢.
使用created_at以检查从插入时间开始是否已经过了一定的持续时间.例如,您可以这样做:
$token = DB::table('password_resets')
->where('token','=',$token)
->where('created_at','>',Carbon::now()->subHours(2))
->first();
Run Code Online (Sandbox Code Playgroud)
然后检查令牌是否存在.
在 >= 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();
}
Run Code Online (Sandbox Code Playgroud)
ReminderEloquent Model在哪里password_resets(laravel 中默认password_resets:)
要验证重置令牌是否已过期,只需检查Laravel函数 tokenExpired ($created_at, $token)
该函数仅执行以下操作:
return Carbon::parse($createdAt)->addSeconds($this->expires)->isPast();
例如
$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)
Run Code Online (Sandbox Code Playgroud)