我不知道如何使用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。

至于如何以及何时使用此密码,您只能在拥有密码后重新哈希该密码,例如当他们登录时。因此,在登录过程中,您需要检查其存储的密码算法与当前算法是否不同,如果有,则用新的密码替换其存储的密码哈希。

10-08 18:01