我正在尝试在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-&gt; save(false);如果我在$ modd-> save()中使用false,则密码更改。是否可以更新密码而不使用false?因为错误,这意味着Yii不会验证。
我使用了$ modd-&gt; save(); $ modd-&GT; getErrors();我得到空白页;如果我使用var_dump($ model-&gt; TheEmeil);死;我明白了:
I:\zzerver\Uwamp -port 84\uw-cms-p8585\www\yii60\wfp\controllers\UsrslogController.php:129:string 'us2@ts.ts' (length=9)
答案 0 :(得分:2)
保存密码时,应验证密码。你可以这样做:
但是我不建议在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]
];
}
}