Laravel 5.4:密码重置令牌与电子邮件令牌

时间:2017-04-07 08:11:44

标签: laravel

升级到laravel 5.4之后我有一个小问题

当我重置密码时,电子邮件会生成并完美发送,但是保存到数据库中用户记录的令牌如下:

$2y$10$N0WFuqEkEIFto.CazxYLdOUmY1X9tBHfvDn8iWKUdlq2W9uOc00Ku

但是它发送给用户进行密码重置的令牌是:

bc1c82830bc8ad1356aa5e2a2a5a342ae6c6fabd385add503795cca1a1993e15

我的问题是为什么两个令牌不同。以及如何执行检查以验证数据库中是否存在令牌,因为我需要将电子邮件地址发送到重置控制器。

提前完成。

3 个答案:

答案 0 :(得分:3)

数据库中的令牌使用Bcrypt加密。这就是数据库中不同的原因。

使用它时,令牌仍然有效。

答案 1 :(得分:3)

您在数据库中存储的令牌与用户表中的密码列的哈希值相同。 但是你收到的令牌并没有散列。这就是为什么他们不同

由于获得此密码;

$2y$10$N0WFuqEkEIFto.CazxYLdOUmY1X9tBHfvDn8iWKUdlq2W9uOc00Ku

你必须这样做

Hash::make('bc1c82830bc8ad1356aa5e2a2a5a342ae6c6fabd385add503795cca1a1993e15');

无法向后恢复此过程。

答案 2 :(得分:3)

它存储在数据库中的令牌是相同的字符串,但是使用bcrypt进行散列,这是一种基于Blowfish密码的安全自适应算法。

您可以查看vanilla PHP password_hash()函数的文档以了解它是如何构建的,以及password_verify()函数来验证散列字符串是否对其未散列版本有效(发送的内容)对于用户,在这种情况下)。

Laravel Hashing

Laravel包含自己的散列物体和外墙,并记录在案。

创建哈希:

<dxg:GridControl ...>
    <dxg:GridControl.View>
        <dxg:TableView ShowVerticalLines="False" />
    </dxg:GridControl.View>
</dxg:GridControl>

根据普通字符串验证哈希:

$string = 'Hello world.';
$hash = Hash::make($string);

注意:在Laravel 5.4中,电子邮件令牌在未记录的更改中从SHA256更改为bcrypt(如问题#18570所示),因此请记住,如果要从Laravel 5.3或更低版本升级。