【问题标题】:Laravel 5 retrieve user email from resetpasswordlog through hashed tokenLaravel 5 通过哈希令牌从 resetpasswordlog 检索用户电子邮件
【发布时间】:2018-11-11 12:32:57
【问题描述】:

我想通过忘记密码期间生成的令牌从 Laravel 5.5 中的 resetpasswordlog(注意,我已更改表名)表中获取记录。我不想使用默认通知,而是向用户发送电子邮件。我使用了 Hash::make($token) 但这与“resetpasswordlog”表中的任何记录都不匹配。

// user model
public function sendPasswordResetNotification($token)
{
dd(Hash::make($token));
}

结果是:

$2y$10$sBeJOd33E7A10ZSwvVZpFeqNe/Cka2jYLdp4rI8fwIkgIFoJZgY5S

但是在 db 表中,我看到记录是这样输入的:

$2y$10$v1BM7EE4Xs64Xlv8Cktz/OHpwS/KX0qpMjg4Jf.VuPg...

我的目的是通过哈希令牌获取用户电子邮件并将电子邮件发送给该用户。

【问题讨论】:

  • 哈希前的token值是多少?
  • 在获取令牌之前在 DB 中:$2y$10$mj.GPulAe7LlyX//qAuHD.nqwaYOD4d.J3tUy9MdkbC... 我在浏览器中收到令牌:$2y$10$v7jpSPv1wMmdMoV75RK0jOS2Qr7Yh5M6Gzc0NCTYAVHg4159pns8e 值y$10$WUUKtwguFcxlVLcQLFBBMbOZ/nn9saSwUFk6Vzz7Yxhl...
  • 您找到解决方案了吗?
  • @ZerosAndOnes 不!但我另辟蹊径,成功了。
  • 您可以在这里分享并选择您自己的答案,这样如果将来有人遇到同样的问题,这将对他们有所帮助。谢谢。

标签: laravel laravel-5


【解决方案1】:

Bcrypt 为相同的输入字符串生成不同的哈希值,因为它在哈希期间生成一个随机的 128 位盐,因此来自Hash::make 的值将不匹配。

相反,您可以使用check 方法来确认未哈希令牌是否与数据库中的哈希令牌值匹配,即,

Hash::check($token, $hashedTokenInDatabase);

此外,由于上述原因,您将无法仅通过令牌直接检索用户的电子邮件,您将需要一个字段,您可以通过该字段查询 重置密码日志表以检索相对哈希令牌值。


一种解决方法是扩展DatabaseTokenRepository 类并覆盖其getPayload 方法,这样令牌就不会在数据库中散列,并且可以使用匹配的令牌从数据库中检索电子邮件,即

return ['email' => $email, 'token' => $token, 'created_at' => new Carbon];

但是,如果安全是一个问题,那么由于Should password reset tokens be hashed when stored in a database? 中提到的几点,我不会建议这种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2018-01-24
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多