Yii2基本重置密码

时间:2018-06-05 15:12:41

标签: yii2 yii2-basic-app

我正在尝试在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)

1 个答案:

答案 0 :(得分:2)

保存密码时,应验证密码。你可以这样做:

  1. 创建一个名为plainPassword的虚拟字段
  2. 设置plainPassword,将密码设置为plainPassword的加密版本
  3. 调整验证规则以在plainPassword上运行验证(无论如何都没有什么特别可以验证加密密码:))
  4. 但是我不建议在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]
        ];
      }
    
    }
    
相关问题