这是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
?
答案 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
工作。