我正在构建我的密码更新功能。但得到错误“哈希无效”。不是100%肯定。
用户控制器
$model = User::findOne(['id' => Yii::$app->user->identity->id]);
$model->scenario = User::SCENARIO_PASSWORD;
if ($model->load(Yii::$app->request->post())) {
// get values
$post = Yii::$app->request->post('User');
// validate old password
if($model->validatePassword($post['password'])){
$model->password = Yii::$app->getSecurity()->generatePasswordHash($post['newPassword']);
// use new password
if($model->save()){
Yii::$app->session->setFlash('success', 'Password Updated');
return $this->redirect(['user/profile']);
} else {
echo 'Couldn\'t save';
}
} else{
// incorrect password
$model->addError('newPassword', 'Incorrect Password');
return $this->render('jsUpdatePassword',[
'model' => $model,
]);
}
}
我的$ post ['password']我希望它是我输入的字符串。我不确定为什么我的哈希值无效,因为它在模型中调用return Yii::$app->security->validatePassword($password, $this->password);
?
答案 0 :(得分:1)
您选择了用户$model = User::findOne(['id' => Yii::$app->user->identity->id]);
,但在此之后您执行了$model->load(Yii::$app->request->post())
。
所以现在你的模型类$this->password
不是来自数据库而是来自post。我错了吗?请在调用$password, $this->password
方法时调试validatePassword
变量中的内容。