Проверка подлинности 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 без проблем, однако я хэширую пароль, только если он установлен пользователем вручную.
Попробуйте хэшировать пароль, только если пользователь его изменил / установил.