升级到laravel 5.4之后我有一个小问题
当我重置密码时,电子邮件会生成并完美发送,但是保存到数据库中用户记录的令牌如下:
$2y$10$N0WFuqEkEIFto.CazxYLdOUmY1X9tBHfvDn8iWKUdlq2W9uOc00Ku
但是它发送给用户进行密码重置的令牌是:
bc1c82830bc8ad1356aa5e2a2a5a342ae6c6fabd385add503795cca1a1993e15
我的问题是为什么两个令牌不同。以及如何执行检查以验证数据库中是否存在令牌,因为我需要将电子邮件地址发送到重置控制器。
提前完成。
答案 0 :(得分:3)
数据库中的令牌使用Bcrypt加密。这就是数据库中不同的原因。
使用它时,令牌仍然有效。
答案 1 :(得分:3)
您在数据库中存储的令牌与用户表中的密码列的哈希值相同。 但是你收到的令牌并没有散列。这就是为什么他们不同
由于获得此密码;
$2y$10$N0WFuqEkEIFto.CazxYLdOUmY1X9tBHfvDn8iWKUdlq2W9uOc00Ku
你必须这样做
Hash::make('bc1c82830bc8ad1356aa5e2a2a5a342ae6c6fabd385add503795cca1a1993e15');
你无法向后恢复此过程。
答案 2 :(得分:3)
它存储在数据库中的令牌是相同的字符串,但是使用bcrypt进行散列,这是一种基于Blowfish密码的安全自适应算法。
您可以查看vanilla PHP password_hash()
函数的文档以了解它是如何构建的,以及password_verify()
函数来验证散列字符串是否对其未散列版本有效(发送的内容)对于用户,在这种情况下)。
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或更低版本升级。