@66demon666
Сетевой админ, АТС-админ

Авторизация с хэшированым паролем в Yii2?

Всем привет. Решил я что открытый пароль это не кайф, решил захэшировать стандартной password_hash, а далее проверять password_verify. Но не пропускает меня, говорит неверный логин или пароль. То ли я не понял как оно должно работать то ли одно из двух, помогите пожалуйста. Вот кусочек из User
public function validatePassword($password)
{
    $user=$this->findOne(["username"=>$this->username]);
    return password_verify($password, $user->password);
}

public function setPassword($password)
{
    $this->password=password_hash($password,PASSWORD_DEFAULT);
}


public function beforeSave($insert)
   {
       if (parent::beforeSave($insert)) {
           if ($this->isNewRecord) {
               $this->authKey = \Yii::$app->security->generateRandomString();
               $this->setPassword($this->password);
           }
           return true;
       }
       return false;
   }
  • Вопрос задан
  • 682 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега PHP
Удалите из метода beforeSave() в модели User установку пароля.
В модели User $this->password у Вас пустой, так как при регистрации Вы работаете с атрибутом модели RegisterForm, а не с атрибутом модели User.
В методе register установите пароль через setPassword()
public function register()
{
   if($this->validate())
   {
      /*****/
      $user->setPassword($this->password)
      $user->generateAuthKey();
      /****/
    }
}

В модели User создайте методы
public function generateAuthKey()
    {
        return $this->auth_key = Yii::$app->security->generateRandomString();
    }

public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password, $this->password_hash);
    }

В LoginForm проверяйте пароль
public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();

            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError($attribute, 'Неправильные учетные данные');
            }
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
samodum
@samodum
Какой вопрос - такой и ответ

Решил я что открытый пароль это не кайф

Это не ты решил. Это айтишный опыт и теперь уже обычная практика
Ответ написан
Комментировать
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы