0

我有一个表格,我正在尝试重置密码。我有 3 个字段密码,更改密码和重新输入密码。

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

在用户注册时,我使用了默认的 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
            ]);
     }

请帮我解决我面临的问题。如果这不是正确的验证方式,请帮助我提供更好的方式来验证密码

4

2 回答 2

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
     ]);
}
于 2016-04-12T09:46:21.083 回答
0

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

*注意:盐是您要恢复的电子邮件帐户。

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

我的新密码是 00000000,我的散列密码是 omXXQw/O/i1po

SF 我的英语!

于 2018-10-12T11:02:24.787 回答