Yii2更新密码


Yii2 Update Password

我正在构建我的密码更新功能。但是得到错误"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变量中得到的内容。