Laravel - 你如何使用Hash :: needsRehash()?

Jea*_*lis 6 php authentication hash laravel

我想知道如何使用,Hash::needsRehash()因为我正在努力看到使用文档的确切内容.

if (Hash::needsRehash($hashed)) {
    $hashed = Hash::make('plain-text');
}
Run Code Online (Sandbox Code Playgroud)

究竟是什么原因导致Hash::needsRehash()返回true或false,如果散列密码在另一个散列(例如MD5,SHA1等)中,它是否返回true?

如果您的数据库在另一个算法中充满了哈希值并Hash::needsRehash()返回true,那么您将如何重新设置用户密码以使它们是最新的?你不能依赖"登录"密码,因为它需要先进行比较才能验证,对吧?

我想也许我在思考问题,但我现在很困惑.幸运的是我的用户密码仍在使用password_hash(),所以不应该是一个问题.

Ben*_*aar 4

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)) {
Run Code Online (Sandbox Code Playgroud)

因此,Hash::needsReHash()当且仅当散列算法发生更改时才会返回 false(因为您没有传递任何选项,例如成本)。

至于如何以及何时使用它,您只能在拥有用户密码时重新哈希 - 例如,当他们登录时。因此,在登录过程中,您检查他们存储的密码的算法是否与您当前的算法不同,并且如果是这样,您可以用新的密码替换他们存储的密码哈希。

  • 当前成本是否嵌入到哈希中?也就是说,我是否需要另一列来存储该值,或者这一切都是自动处理的? (2认同)