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()方法返回null:

public function getSalt(){
    return null;
}

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

然而。。。

如果我使用这个网站用bcrypt:加密我的密码

http://bcrypthashgenerator.apphb.com/

然后手动将结果输入数据库,并尝试使用我用上述链接的结果更新的用户密码进行验证,它运行良好。

所以有一点我还没有设置,当我加密密码时,Symfony无法对其进行身份验证。

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

编辑

我使用的是PHP 5.5.9

我还尝试过使用BCryptPasswordEncoder($cost)类,将__construct上的开销设置为与我的security.yml中的开销相同,但它仍然不进行身份验证。

编辑

我也尝试过通过composer将这个类安装到,如这里所建议的。

编辑

如果我使用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());

你生活和学习啊!