使用yii 2验证登录密码始终为false

时间:2015-03-20 10:01:12

标签: php authentication yii2

这是validatePassword

中的models/user.php功能
public function validatePassword($password)
    {
      /* var_dump(Yii::$app->getSecurity()->validatePassword($password, $this->password)); */

        return Yii::$app->getSecurity()->validatePassword($password, $this->password);
};

这是setPassword

中的models/user.php功能
public function setPassword($password)
    {

        $this->password = Yii::$app->getSecurity()->generatePasswordHash($password);
    }

调用setPassword函数我使用beforeSave中的models/user.php函数:

public function beforeSave($insert) {
            $this->setPassword($this->password);
            $this->generateAuthKey();
            $this->generatePasswordResetToken();
        return true;
    }

模型规则models/user.php

public function rules()
    {
        return [
            [['username', 'password', 'role'], 'required'],
            [['username', 'password'], 'string', 'max' => 45],
            [['role'], 'string', 'max' => 16],
            [['auth_key'], 'string', 'max' => 32],
            [['password_reset_token'], 'string', 'max' => 255],
            [['username'], 'unique']
        ];
    }

为什么我的密码验证始终为false

3 个答案:

答案 0 :(得分:2)

我认为你在数据库中犯了一个错误。也许,你的密码字段有VARCHAR(32)(你写的“当我使用md5密码时它是正常的。”)。

Yii::$app->getSecurity()->generatePasswordHash($password);

此函数生成的字符串长度超过32个字符。对于密码字段,请使用TEXT而不是VARCHAR(32)。

答案 1 :(得分:0)

也许您可以在http://www.bsourcecode.com/yiiframework2/yii-2-user-login-from-database/或其他stackoverflow问题Yii Framework 2.0 Login With User Database上看到如何登录yii2

希望可以帮到你..

答案 2 :(得分:0)

当validatePassword执行时,$this->password是否等于db值? 我相信setPassword()在validatePassword之前为$this->password工作。