Yii2 passwordHash返回不同的值

时间:2015-09-27 17:09:39

标签: php yii2

我已经使用Yii2制作了一些应用程序,但这里的登录功能有些问题。密码似乎不匹配。

_form.php这个

<?= $form->field($model, 'first_name')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'last_name')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'email')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'pass')->passwordInput(['maxlength' => true]) ?>

user.php的

public function beforeSave($insert) 
{

    if($this->isNewRecord)
    {
        $this->pass = Yii::$app->getSecurity()->generatePasswordHash($this->pass);

    }
    return parent::beforeSave($insert);
}

LoginForm.php

    public function validatePassword($attribute, $params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser(); 
        echo 'current: ' . $user->pass; 
        echo '<br />';
        echo 'plain: ' . Yii::$app->getSecurity()->generatePasswordHash('Password');
        echo '<br />';
        echo 'function: ' . $user->validatePassword($this->pass);

        if (!$user || !$user->validatePassword($this->pass)) {
            $this->addError($attribute, 'Incorrect user or password.');
        }
    }
}

我的电子邮件和密码在这里失败了。我回答了一些要检查的事情。来自DB的用户值始终相同,我传递"Password"的普通版本始终返回不同的哈希,第三个print_r()不返回任何内容。我不确定我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

检查此代码:

$password = 'Password';
$passwordHash = Yii::$app->getSecurity()->generatePasswordHash($password);
Yii::$app->getSecurity()->validatePassword($password, $passwordHash);

你应该:

  • generatePasswordHash的写入结果更正为数据库
  • validatePassword方法
  • 上使用该哈希值

像这样写出正确的user->validatePassword方法:

public function validatePassword($password)
{
    return Yii::$app->security->validatePassword($password, $this->password_hash);
}

答案 1 :(得分:-1)

  • 如果执行print_r(),generatePasswordHash函数将始终创建不同的值。
  • 但如果密码字符串正确,validatePassword函数将始终返回
  • 所以别担心。
  • 也许你的数据库中的列长度是短的以保存哈希