在Yii2中重置密码验证

时间:2016-04-11 07:00:49

标签: yii2 yii2-user yii2-model yii2-validation

我有一个表单,我正在尝试重置密码。我有3个字段密码,changepassword和re-enterpassword。

首先,我需要检查密码字段是否与数据库密码匹配。

在用户注册时,我使用了默认的Yii2功能,该功能生成随机密码并将该密码保存到数据库中。我还在用户登录时使用了默认登录功能。

现在,为了验证密码,我尝试使用登录时使用的相同默认Yii2验证。但是,它没有正常工作。当我使用$ user-> validate()回调并检查控制器时,它总是给出验证,您可以在下面的代码中找到它。

我有view resetProfilePassword.php ,其中有表格

    <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
    <?php  
    echo $form->field($resetpasswordmodel, 'password');
    echo $form->field($resetpasswordmodel, 'changepassword');
    echo $form->field($resetpasswordmodel, 'reenterpassword');
    ?>
    <div class="form-group">
        <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>

我有model resetProfilePasswordForm.php

  <?php
    namespace frontend\models;
    use common\models\User;
    use yii\base\Model;

    class ResetProfilePasswordForm extends Model
    {
      public $password;
      public $changepassword;
      public $reenterpassword;

      public function rules()
       {
        return [

        ['password', 'validatePassword'],
        ['changepassword', 'required'],
        ['reenterpassword', 'required'],
        ['reenterpassword', 'compare', 'compareAttribute'=>'changepassword', 'message'=>"Passwords don't match" ]
        ];
      }

public function attributeLabels()
{
    return [
        //'user_profile_id' => 'User Profile ID',
        //'user_ref_id' => 'User Ref ID',
        'password' => 'Password',
        'changepassword' => 'Change Password',
        'reenterpassword' => 'Re-enter Password',
        ];
       }

     public function validatePassword($attribute, $params)
     {
      if (!$this->hasErrors()) {
        $user = $this->getUser();
        if (!$user || !$user->validatePassword($this->password)) {
            $this->addError($attribute, 'Incorrect username or password.');
         }
        }
       }

      protected function getUser()
      {
        if ($this->_user === null) {
          $this->_user = User::findByUsername($this->username);
        }

        return $this->_user;
        }

    }

这是controller ProfileController.php

 public function actionResetProfilePassword()
   {
    $resetpasswordmodel = new ResetProfilePasswordForm();
    if ($resetpasswordmodel->load(Yii::$app->request->post())) {

        $user = User::find()->where(['id' => Yii::$app->user->identity->id])->one();
        if($user->validate()){
        $user->save(false);
        }
     }
             return $this->render('ResetProfilePassword', [
            'resetpasswordmodel' => $resetpasswordmodel
            ]);
     }

请在我遇到问题的地方帮助我。 如果这不是正确的验证方式,请帮助我提供验证密码的更好方法

2 个答案:

答案 0 :(得分:1)

要应用resetpasswordmodel验证 - 只需运行validate()方法然后 - 更新用户模型:

public function actionResetProfilePassword()
{
    $resetpasswordmodel = new ResetProfilePasswordForm();
    if ($resetpasswordmodel->load(Yii::$app->request->post())) {
        $user = User::find()->where(['id' => Yii::$app->user->identity->id])->one();
        # here we run our validation rules on the model
        if ($resetpasswordmodel->validate()) {
            # if it is ok - setting the password property of user
            $user->password = $resetpasswordmodel->changepassword;
            # and finally save it
            $user->save();
     }
     return $this->render('ResetProfilePassword', [
         'resetpasswordmodel' => $resetpasswordmodel
     ]);
}

答案 1 :(得分:0)

您可以创建新的哈希并将其替换为旧密码在数据库中

*注意:salt是您要还原它的电子邮件帐户。

$salt= 'omid.ahmadyani@Outlook.com';
$pass = crypt('00000000',$salt);
die($pass);

我的新密码是00000000 我的哈希通行证是omXXQw / O / i1po

S F我的英语!