laravel 怎么调用hash:make

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel 怎么调用hash:make相关的知识,希望对你有一定的参考价值。

参考技术A 在你的控制器里面,引入use Illuminate\Support\Facades\Hash;然后再调用Hash::make()就不会报错了 参考技术B 首先确认,后台的用户表,我设计表叫做badmin,每个管理员有用户名(username),有昵称(nickname),有邮箱(email),有密码(password) 这里玩个花,使用laravel的migration来建立表(实际上可以用不着使用这个工具建立表) 1 安装好最基本...

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

【中文标题】Laravel - 你如何使用 Hash::needsRehash()?【英文标题】:Laravel - How do you use Hash::needsRehash()? 【发布时间】:2015-10-16 02:23:45 【问题描述】:

我想知道如何使用 Hash::needsRehash(),因为我正在努力查看文档的确切用途。

if (Hash::needsRehash($hashed)) 
    $hashed = Hash::make('plain-text');

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

如果您的数据库充满了另一种算法的哈希值并且Hash::needsRehash() 返回真,您将如何重新哈希用户密码以使其保持最新?您不能依赖“登录”密码,因为它需要先进行比较才能验证,对吧?

我想也许我想太多了,但我现在很困惑。幸运的是,我的用户密码无论如何都使用password_hash(),所以应该不是问题。

【问题讨论】:

【参考方案1】:

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)) 

所以Hash::needsReHash() 将返回 false 当且仅当散列算法已更改(因为您没有传递任何选项,例如成本)。

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

【讨论】:

够清楚了。我的另一个担忧仍然存在。如果您当前的用户密码需要重新散列,如果您无法验证用户的真实密码,您将如何重新散列它们? 我已经更新了我的答案;你是对的,除非你有密码,否则你不能重新设置密码。 您始终可以验证用户的密码;当 PHP 存储密码时,它也会存储所使用的哈希值。因此 PHP 能够在哈希更改后验证密码。 当前成本是否嵌入到哈希中?也就是说,我需要另一列来存储这个值,还是这一切都是自动处理的? @Cruncher 当前成本嵌入在bcrypt 结果中。这个答案有一个很好的解释:***.com/questions/6832445/…【参考方案2】:

这似乎是如何在 Laravel 5.6 中做到这一点

把它放在你的 LoginController 中:

protected function authenticated(Request $request, $user) 
    if (Hash::needsRehash($user->password)) 
        $user->password = Hash::make($request->password);
        $user->save();
    

https://laravel.com/docs/5.6/hashing#basic-usage

【讨论】:

【参考方案3】:

当 PHP 更新并且添加了新的/更好的默认算法或更改了任何其他参数时,该方法返回 true。这让您无需更新代码即可自动利用它。

当用户登录时使用此方法,因为这是您唯一可以访问纯文本密码的时间。根据旧的hash确认无误后,取明文密码,重新hash,放回数据库以备后用。

举个假设的例子,假设现在算法是md5() 10k 次。在 PHP7 中,它被更新到 sha512() 15k 次。如果散列是$count|$algo|$hash 格式,则该方法可以判断散列何时过时。由于旧算法没有被删除,您仍然可以在重新散列之前使用旧参数验证密码。

注意:显然使用md5()/sha512() 是个坏主意。我只是将它们用作示例。

【讨论】:

以上是关于laravel 怎么调用hash:make的主要内容,如果未能解决你的问题,请参考以下文章

laravel 记住密码怎么实现

Laravel 中的密码验证总是返回失败(Hash::check)

laravel 的 Auth 使用的是哪个 Hash 函数?

hashmap会问到数组索引,hash碰撞怎么解决

laravel 7 sanctum Hash::check 总是返回 false

laravel 怎么抓去错误日志