Symfony 2 - 不使用 bcrypt 验证用户

Symfony 2 - not authenticating user using bcrypt

我在数据库中添加了一个用户。

我使用 bcrypt 加密对他们的密码进行编码:

$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword($user->getPassword(),$user->getSalt());
$postData->setPassword($password);

这一切都很好地保存到数据库中。

在我的用户实体上我的 getSalt() 方法 returns null:

public function getSalt(){
    return null;
}

现在,当我尝试验证 symfony 日志时,它告诉我输入了错误的凭据。

然而...

如果我使用此站点使用 bcrypt 加密我的密码:

http://bcrypthashgenerator.apphb.com/

然后手动将结果输入数据库,并尝试使用我用上面的结果更新的用户密码进行身份验证 link, 效果很好。

所以有些东西我没有设置,当我加密密码时 symfony 无法验证它。

我试过在 getSalt() 上设置盐,将其设置为空字符串。

编辑 我正在使用 php 5.5.9

我也尝试过使用 BCryptPasswordEncoder($cost) class, 将 __construct 的成本设置为与我的 security.yml 相同 它仍然没有验证。

编辑 我也尝试按照建议通过作曲家安装此 class here.

编辑

如果我使用php方法:

password_hash('testertester',PASSWORD_BCRYPT,array('cost'=>13));

它完美地验证了。

因此,它需要在 Symfony 中做更深入的工作。我会继续挖掘。

仍然没有运气:-/

到目前为止,我正在网上搜索无济于事。

如有任何帮助,我们将不胜感激。

广告

我传递的是现有实体对象而不是提交的数据对象!!

$postData = $form->getdata();

$factory = $this->get('security.encoder_factory');

$encoder = $factory->getEncoder($user);

$password = $encoder->encodePassword($user->getPassword(),$user->getSalt());

$postData->setPassword($password);

注意这里的这一行:

$user->getPassword() 需要是 $postData->getPassword()

$password = $encoder->encodePassword($postData->getPassword(),$user->getSalt());

边学边学啊!