【问题标题】:ZfzUser Authentication Always failsZfzUser 身份验证总是失败
【发布时间】: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


【解决方案1】:

我问的正是the same question here

事实证明,crypt 可以使用哈希。它会将其分解成可用的部分,然后将其中的适当部分用作盐,因此将整个哈希作为第二个参数传递是没有问题的。

你真的试过了吗?会不会是其他地方出了问题。

【讨论】:

  • 也许我将密码以错误的方式存储在数据库中,因为结果哈希与数据库中的密码不同。我已在原始帖子中包含用于生成密码以保存在数据库中的代码。请看看它是正确的。
  • @backTangent 创建密码后立即尝试:$bcrypt->verify($password, $this->password);
猜你喜欢
  • 2016-06-23
  • 2019-03-14
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2014-01-24
相关资源
最近更新 更多