Проверка подлинности phpass не выполняется в Yii

Я пытаюсь реализовать проверку подлинности phpass в Yii, однако каждый раз это не удается. Я читал много SO статей и пока не нашел решения, поэтому думаю, что это должно быть проблемой, специфичной для Yii.

В User.php я сохраняю хешированный пароль:

public function beforeSave() {
    $phpass = new PasswordHash(8, false);
    $hash = $phpass->HashPassword($this->user_pass);
    $this->user_pass = $hash;
    return true;
}

В UserIdentity я проверяю пароль:

public static function isPasswordValid($plainPass, $hashedPass) {
    $phpass = new PasswordHash(8, false);
    $isValid = $phpass->CheckPassword($plainPass, $hashedPass);


    if($isValid){
        return true;
    }

    return false;
}

$hashedPass выходит из БД, plainPass это то, что пользователь только что вошел в форму, но $isValid возвращает ложь все время. Infact я вытащил хешированный пароль из базы данных, и я применил его вручную, и он по-прежнему не удается:

$isValid = $phpass->CheckPassword('password', '$2a$08$P9X8duz7S8LOysz1XIn3fe/YYW3dwAs2busSBIX/QnZhKH/R9/H1S')

Я проверил, чтобы убедиться, что хешированный пароль не усекается в базе данных при вставке, и это не... Я изменил свое поле пароля, чтобы varchar 60 согласно другой статье ТАК, и это не помогло...

РЕДАКТИРОВАТЬ: Кажется, что если я вручную вставить хэш в поле базы данных, аутентификация работает после его генерации с помощью:

echo $phpass->HashPassword('password');

1 ответ

Решение

Проблема может быть в beforeSave. Ты хеш user_pass каждый раз, когда вы сохраняете пользователя. Если вы дважды сохраните пользователя, ваш пароль будет хеширован дважды, поэтому он бесполезен.

Я использую phpass с yii без проблем, однако я хэширую пароль, только если он установлен пользователем вручную.

Попробуйте хэшировать пароль, только если пользователь его изменил / установил.

Другие вопросы по тегам