2015-07-03 7 views
1

Я пытаюсь проверить старый пароль пользователя, чтобы он мог изменить пароль, но на данный момент я получаю Ошибка Hash Ошибка.Yii2 - подтвердите пароль (Hash is invalid error)

Это правило проверки:

['password_old', function($attribute){ 
       if(!$this->validatePassword($this->{$attribute})) 
        $this->addError($attribute, 'Please Enter Your Old Password'); 
      }], 

validatePassword метод:

public function validatePassword($password){ 
      return Yii::$app->getSecurity()->validatePassword($this->salt . $password, $this->password); 
     } 

форма используется для изменения пароля:

$form = ActiveForm::begin(
      [ 
       'enableAjaxValidation' => true, 
       'action'    => 'user/changepassword', 
       'id'     => 'changePassword' 
      ] 
     ); 


    echo $form->field($model, 'password_old')->passwordInput(['autocomplete' => 'off']); 
    echo $form->field($model, 'password')->passwordInput(['autocomplete' => 'off'])->label('New Password'); 
    echo $form->field($model, 'password_confirm')->passwordInput(['autocomplete' => 'off']); 
+0

Почему $ this-> соль? Вы добавляете еще одну соль? Хэш-пароль уже солен. И я не уверен на 100%, но похоже, что вы сравниваете $ this-> salt. $ password с $ this-> password и $ this-> password - это новый пароль из ввода формы, но вы должны сравнить его со старым хэшем пароля. – Bizley

+0

У меня есть эта ошибка в переходе изменения для пользователя. как это исправить. https://stackoverflow.com/questions/44218661/after-make-or-change-password-user-dont-login-in-yii2 – user3770797

ответ

0

"Hash недействителен ошибка" becau se ваш пароль неправильный формат.

Почему?

  • При вызове validatePassword в правиле валидации, не пароль хранится в базе данных, это новый пароль - в последнее время представить из формы. Чтобы решить проблемы, вы можете сослаться на LoginForm класс в yii2-basic-app или yii-advanced-app.

Предложения:

  • "Соль" не является необходимым, так как она была включена автоматически в функции \Yii::$app->security->generatePasswordHash (PHP 5> = 5.5.0 password_hash)
1

Другая причина Ошибка хеша Ошибка возникает, если вы передаете нуль как $hash методу Yii::$app->getSecurity()->validatePassword.

Я предлагаю вам сделать чек, как это в вашем коде

public function validatePassword($password){ 
     if(is_null($this->password)) 
      return false; 
     return Yii::$app->getSecurity()->validatePassword($this->salt . $password, $this->password); 
    } 
+0

какая соль здесь? – lalithkumar

0

Я решил проблему, когда значение изменения столбца пароля в БД из VARCHAR (128) для VARCHAR (255) и снова Registerd ,

+0

мое поле - текст, но у меня проблема https://stackoverflow.com/questions/44218661/after-make-or-change-password-user-dont-login-in-yii2 – user3770797

0

У меня также была эта проблема, и разрешен.

Причина в том, что раньше я использовал алгоритм sha1, и после его преобразования в bcrypt (Yii::$app->security->generatePasswordHash) я столкнулся с этой проблемой.

Мой предыдущий пароль был создан с помощью алгоритма sha1 и был в базе данных. Когда я изменил код на новый алгоритм и хотел войти в систему, я ошибся.

Если вы сбросили предыдущий пароль с помощью нового алгоритма, проблема будет решена.