yii2 如何通过 actionUpdate 更改用户密码?

yii2 How to change user password via actionUpdate?

我有高级应用程序。我为用户模型创建 CRUD。所以我得到了更新动作。我尝试通过添加

来更新密码
<?= $form->field($model, 'password')->passwordInput() ?>

但是它调用错误,类似于"password is write-only variable"

我尝试使用字段

<?= $form->field($model, 'new_password')->passwordInput() ?>

添加 actionUpdate model->setPassword($this->new_password); 并抛出 Getting unknown property: common\modules\user\controllers\DefaultController::new_password。 但是 model->setPassword('123456'); 成功设置密码 123456.

如何从视图中获取 new_password 字段,并将其放入 model->setPassword('there');

或者可能存在最好的方法?

UPD

我试过了。不工作。

  public function beforeSave($insert)
  {
    if (parent::beforeSave($insert)) {
      if ($this->new_password) {
        $this->setPassword($this->new_password);
      }
      return true;
    } else {
      return false;
    }
  }

UPD2

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

并且password_hash写入数据库。我可以通过生成的 CRUD 轻松更改哈希,但不知道如何在 updateAction.

中使用 setPassword()

此处“$this”是您的控制器,当然,它没有 'new_password' 属性。你最好不要在控制器中设置新密码,而是在模型中进行,例如在 beforeSave 方法中:

if ($this->new_password) {
    $this->setPassword($this->new_password);
}

您可以尝试使用另一个变量

编写 updatePassword 类似 setPassword 的函数
 public function updatePassword($new_password) {
    $this->password_hash = Yii::$app->security->generatePasswordHash($new_password);
  }

声明一个变量

public $new_password;

并在rules()中添加

  public function rules() {
    return [
      //...
      ['new_password', 'required'],
      ['new_password', 'string', 'min' => 6],
    ];
  }

并在您的控制器中的 actionUpdate 添加

$model->updatePassword($model->new_password);

这应该有帮助