【发布时间】:2016-02-13 17:29:30
【问题描述】:
我已经在我的应用程序中实现了 ZfcUser。问题是即使密码正确,身份验证也总是失败。
我已经深入研究了这个问题。我注意到的是,应用程序从密码中检索密码哈希并将其传递给 Bcrypt 验证方法。
这是 Zend 的代码
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"
但我看到它永远不会匹配,因为验证方法使用哈希值作为盐。我做错了什么,还是框架中存在一些错误/?
用于在我的用户实体中设置密码的代码是
public function setPassword($password)
{
$bcrypt = new Bcrypt();
$bcrypt->setCost(14);
$this->password = $bcrypt->create($password);
}
【问题讨论】:
标签: zend-framework zend-framework2 zfcuser