我正在构建我的密码更新功能。但是得到错误"hash invalid"。不是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);
?
您正在选择用户$model = User::findOne(['id' => Yii::$app->user->identity->id]);
,这是可以的,但之后您要选择$model->load(Yii::$app->request->post())
。所以现在在您的模型类$this->password
中不是来自数据库,而是来自post。我错了吗?调用validatePassword
方法时,请调试您在$password, $this->password
变量中得到的内容。