CPasswordHelper::verifyPassword() как работает?

Не понятно как работает, возможно я что-то не так делаю

UserIdentity.php
private $_id;

public function authenticate(){

 $record = Users::model()->findByAttributes(array('login' => $this->username));

   if($record === null){
       $this->errorCode = self::ERROR_USERNAME_INVALID;
   }else if(CPasswordHelper::verifyPassword($this->password, $record->password)){
        $this->_id = $record->id;
	$this->errorCode = self::ERROR_NONE;

   }else{
	$this->errorCode = self::ERROR_PASSWORD_INVALID;
   }
   return !$this->errorCode;
}


Users.php
public function authenticate(){
		
   $identity = new UserIdentity($this->login, $this->password);

     if($identity->authenticate()){
	 Yii::app()->user->login($identity,3600*24*30);
	 return true;
     }else{
	$this->addError('password',"Неправильный логин или пароль.");
	return false;
    }
}


Авторизация не проходит, уже 2 день сижу и понять не могу что же я не так делаю, помогите пожалуйста разобраться.
  • Вопрос задан
  • 3304 просмотра
Решения вопроса 1
hoOstel
@hoOstel Автор вопроса
Users.php
public function hashPassword($password){
     return CPasswordHelper::hashPassword($password);
}

public function validatePassword($password){
    return CPasswordHelper::verifyPassword($password,$this->password);
}

UserIdentity.php
public function authenticate(){

		$user = Users::model()->findByAttributes(array('login' => $this->username));

		if($user === null){
			$this->errorCode = self::ERROR_USERNAME_INVALID;
		}else if(!$user->validatePassword($this->password)){
			$this->errorCode = self::ERROR_PASSWORD_INVALID;
		}else{
			$this->_id = $user->id;
			$this->setState('login', $user->login);
			$this->errorCode = self::ERROR_NONE;
		}
		return $this->errorCode == self::ERROR_NONE;
	}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
www.yiiframework.com/doc/api/1.1/CPasswordHelper#v...

вот так вот хреновенько оно и работает. Оно просто генерит хэш от пароля и сравнивает его. Не самый секьюрный способ.

Причины по которым может не проходить авторизация - $this->password содержит что-то не правильное, либо вы уже захэшенный пароль передаете, либо в модели пользователя не захэшеный пароль и т.д.
Ответ написан
dzhem911
@dzhem911
I know H.T.M.L. ;)
Добрый день.
Решили этот вопрос? Столкнулся с этой проблемой. Тоже 2й день сижу)
Ответ написан
des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак
@pirogtm
Тоже бился с проблемой. А проблема оказалась проста: в БД не хватало длины для поля password.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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