1

ユーザーのパスワードを更新しようとしていますが、保存できません

これはコントローラーコードです:

public function actionChangepassword($id) {
    $model = new UserPass();
    $user = $this->findModel($id);

    if ($model->load(Yii::$app->request->post())) {
        if ($model->validate()) {
            try {
                $user->setPassword($_POST['UserPass']['newpass']);

                if (!$user->save()) {
                    Yii::$app->getSession()->setFlash('success', 'Password changed to ');
                    return $this->redirect(['indexi/'.$user->password]);
                } else {
                    Yii::$app->getSession()->setFlash('error', 'Password not changed');
                    return $this->redirect(['index']);
                }
            } catch (Exception $e) {
                Yii::$app->getSession()->setFlash('error', "{$e->getMessage()}");
                return $this->render('changepassword', [
                    'model' => $model
                ]);
            }
        } else {
            return $this->render('changepassword', [
                'model' => $model
            ]);
        }
    } else {
        return $this->render('changepassword', [
            'model' => $model
        ]);
    }
}

値があることを確認するvar_dump($_POST['UserPass']['newpass'])と;

パーツを変えてみると$user->setPassword($_POST['UserPass']['newpass']);

$modeluser->password = $_POST['UserPass']['newpass'];

パスワードは保存されますが、ハッシュ化されません。

何が間違っている可能性があります

これがsetpassword機能です

public function setPassword($password)
{
    $this->password = Yii::$app->security->generatePasswordHash($password);
}
4

2 に答える 2

1

1)変更

$user->setPassword($_POST['UserPass']['newpass']);

$user->newpass = $user->setPassword($_POST['UserPass']['newpass']);

2)変更

public function setPassword($password)
{
    $this->password = Yii::$app->security->generatePasswordHash($password);
}

public function setPassword($password)
{
    return Yii::$app->security->generatePasswordHash($password);
}
于 2016-08-10T12:56:23.963 に答える
0

最善の方法は、高度なテンプレートでどのように実装されているかを確認することです。

于 2016-08-10T18:55:15.383 に答える