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);
这应该有帮助
我有高级应用程序。我为用户模型创建 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);
这应该有帮助