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

时间:2015-02-28 18:57:40

标签: passwords action yii2

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

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

但它调用错误,类似于&#34;密码是只写变量&#34;

我尝试使用字段

<?= $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');成功设置了pussword 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()

2 个答案:

答案 0 :(得分:1)

这里&#34; $ this&#34;是你的控制器,当然,没有&#39; new_password&#39;属性。您最好不要在控制器中设置新密码,而是在模型中执行,例如在beforeSave方法中:

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

答案 1 :(得分:1)

您可以尝试使用其他变量

编写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);

这应该有帮助