我正在尝试为Yii2应用程序中的用户生成随机密码。
我有以下代码:
$rand_password = Yii::$app->security->generateRandomString(8);
$user->password = Yii::$app->security->generatePasswordHash($rand_password);
之后我保存$user
模型,散列字符串也保存在数据库中。但是,我之后无法使用$rand_password
字符串登录,因为我收到了无效密码错误消息。
generatePasswordHash
描述表示哈希是根据提供的密码和随机盐字符串生成的。实际上,我连续多次使用相同的密码字符串调用该函数,每次都得到不同的结果。所以我的问题是,如果盐串是随机的,每次都不同,我怎么能用这个函数来验证密码?当我尝试登录时,我使用用户提供的密码字符串调用相同的函数,但这次salt会有所不同,所以我无法生成与以前相同的哈希值?我在这里缺少什么?
答案 0 :(得分:0)
好了,经过几个小时的调试并寻找资源和解释后,我发现我正在使用的用户模块:https://github.com/amnah/yii2-user实际上是在将密码保存到数据库之前自动对密码进行哈希处理。换句话说,只要你打电话:
$user->password = SOMETHING;
SOMETHING
在保存时自动通过generatePasswordHash()
函数。我的问题是我在我的代码中丢弃了它,所以基本上密码被哈希两次。