我不知道如何使用Hash::needsRehash()
,因为我正努力查看使用该文档的确切含义。
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}
究竟是什么导致
Hash::needsRehash()
返回true或false,如果哈希密码位于另一个哈希中(例如MD5,SHA1等),它会返回true吗?如果您的数据库在另一种算法中充满了哈希并且
Hash::needsRehash()
返回true,那么您将如何重新哈希用户密码以使其保持最新状态?您不能依靠“登录”密码,因为需要先对其进行比较以进行验证,对吗?我想也许我想得太多了,但是现在我很困惑。幸运的是,我的用户密码无论如何都使用
password_hash()
,所以应该没有问题。 最佳答案
Hash::needsReHash()
仅调用php的内置password_needs_rehash函数。文档中的一个有用评论是:
// Check if a newer hashing algorithm is available
// or the cost has changed
if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) {
因此,且仅当哈希算法已更改时(因为您未传递任何选项(例如cost)),
Hash::needsReHash()
才会返回false。至于如何以及何时使用此密码,您只能在拥有密码后重新哈希该密码,例如当他们登录时。因此,在登录过程中,您需要检查其存储的密码算法与当前算法是否不同,如果有,则用新的密码替换其存储的密码哈希。