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 中的密码验证总是返回失败(Hash::check)
laravel 的 Auth 使用的是哪个 Hash 函数?