Laravel 5.6-重置密码令牌如何确保它们匹配?

时间:2019-07-24 00:02:22

标签: laravel laravel-5 laravel-5.5 laravel-5.6

当用户忘记密码并尝试重置密码时,他们会收到带有令牌的重置密码电子邮件链接:

site.com/my/password/reset/ddc3669ab1bbd78abe620ef910716ae91678bb4beb5cd8896e21efaaa0c9d5c6

但是在后端,数据库password_resets表中的令牌看起来像是散列的: $2y$10$O6pgU21FhsOcgpgeqR8RReFYoCGhHNBH5bHKxtE6q1tJMTUufrbr.

因此,在访问路线时,传递的唯一识别信息是令牌: ddc3669ab1bbd78abe620ef910716ae91678bb4beb5cd8896e21efaaa0c9d5c6

// Controller Method
passwordResetVerifyByToken($token){
  $record = DB::table('password_resets')->where('token', $token)
                                        ->first();
}

当然,我们不会获得任何记录,因为来自电子邮件的普通令牌不会与上述查询的数据库中的哈希值匹配。因此,使用普通的通过电子邮件发送的令牌链接,当用户单击它时,我们如何将其与数据库中的链接进行比较以验证其是否存在并且是匹配的令牌?

2 个答案:

答案 0 :(得分:1)

您应该使用Hash::check方法,该方法将返回true或false,具体取决于重置令牌的哈希值是否与存储的数据库值匹配。

if (Hash::check($token, $row->token)) {
    // The passwords match...
}

Laravel文档: https://laravel.com/docs/5.6/hashing#basic-usage

答案 1 :(得分:0)

不要担心Laravel有自己的高级功能哈希,您应该尝试一下

if (Hash::check($token, $row->token)) {
  // write your code or other function 
 }