Yii2 基本重置密码



>我正在尝试在 Yii2 Basic 中创建"忘记密码">

我在控制器中的函数是:

public function actionLostpassword() 
{
$model = new Userlogin;
if ($model->load(Yii::$app->request->post()) ) 
{
if (Userlogin::findOne(['UserEmail' => $model->TheEmeil]))
{ 
$this->ResetPassWords($model->TheEmeil); 
} 
else { 
echo "Email Not Match" ;
}
}
else{
return $this->render('Forms/_ForgetPassword', [
'model' => $model,
]);
}
}
public function ResetPassWords($temail)
{
$randPassword = Yii::$app->params['RandPassword'];
$modd = Userlogin::findOne(['UserEmail' => $temail ]);
$modd->Password = Yii::$app->security->generatePasswordHash($randPassword);
$modd->save();
echo $randPassword;
}

我的观点是:

<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'TheEmeil')->textInput(['maxlength' => true]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Reset' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>

但是如果我使用 $modd->保存(错误(;如果我在 $modd->save(( 中使用 false,密码会更改。是否可以在不使用 false 的情况下更新密码?因为假的意思是 Yii 不会验证.

我使用了$modd->save((; $modd->getErrors((;我得到空白页;如果我使用var_dump($model->TheEmeil(;死;我得到 :

I:zzerverUwamp -port 84uw-cms-p8585wwwyii60wfpcontrollersUsrslogController.php:129:string 'us2@ts.ts' (length=9)

保存密码时,应对其进行验证。你可以做:

  1. 创建一个名为 plainPassword 的虚拟字段
  2. 在设置明密码时,将密码设置为明文密码的加密版本
  3. 调整验证规则以在 plainPassword 上运行验证(无论如何,加密密码没有什么特别的要验证的:)(

但是,我不建议在 ActiveRecord 实体中使用此逻辑。 您最好创建一个像ForgotPasswordForm extends Model这样的模型。

你最终应该得到这样的东西:

class UserLogin extends ActiveRecord {
public $plainPassword;
public function setPlainPassword($value){
$this->password = Yii::$app->security->generatePasswordHash($value);
}
public function rules(){
return [
['plainPassword', 'required', 'min' => 6]
];
}
}

最新更新