2015-11-12 3 views
1

Я применил ZfcUser в своем приложении. Проблема в том, что аутентификация всегда терпит неудачу, даже если пароль правильный.Аутентификация ZfzUser всегда сбой

Я искал проблему. Я заметил, что приложение извлекает хэш пароля из пароля и передает его методу проверки Bcrypt.

Вот код из Зенда

if (!$bcrypt->verify($credential, $userObject->getPassword())) { 
    // Password does not match 
    $e->setCode(AuthenticationResult::FAILURE_CREDENTIAL_INVALID) 
     ->setMessages(array('Supplied credential is invalid.')); 
    $this->setSatisfied(false); 
    return false; 
} 

Теперь Bcrypt проверить метод работает следующим образом.

public function verify($password, $hash) 
{ 
    $result = crypt($password, $hash); 
    return Utils::compareStrings($hash, $result); 
} 

мой пароль 'admin123', сгенерированный хэш сохраняется для него в базе данных "$2y$14$9QsDD3.T3xwCnZsMsiBft.fwLewL.0L5pyViAJY0EbNz0ECIGDi5u"

, но я вижу, что он никогда не будет соответствовать, потому что метод проверить использует значение хэша в качестве соли. Я делаю что-то неправильно, или есть какая-то ошибка в рамках /?

код, используемый для установки пароля в моем User Entity является

public function setPassword($password) 
{ 
    $bcrypt = new Bcrypt(); 
    $bcrypt->setCost(14); 
    $this->password = $bcrypt->create($password); 
} 
+0

Возможный дубликат метода проверки [Zend \ Crypt \ Password \ BCrypt] (http://stackoverflow.com/questions/32717509/zend-crypt-password-bcrypt-verify-method) – Wilt

ответ

0

спросил я точно the same question here.

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

Вы действительно попробовали? Может быть, проблема в другом месте.

+0

Возможно, тогда я сохраняю пароль неверно в базе данных, потому что хэш результата отличается от пароля в db. Я включил код в исходное сообщение для генерации пароля для сохранения в базе данных. Пожалуйста, взгляните на это, что это правильно. –

+0

@backTangent После того, как вы создали пароль, немедленно попробуйте: '$ bcrypt-> verify ($ password, $ this-> password);' – Wilt

+0

@backTangent И это сработало? – Wilt

Смежные вопросы