Symfony 2 - 不使用bcrypt对用户进行身份验证

时间:2015-02-19 21:09:33

标签: php symfony 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按照建议here安装此类。

修改

如果我使用php方法:

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

它完美地验证。

所以它在Symfony中做得更深。我会继续挖掘。

仍然没有运气: - /

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

非常感谢任何帮助。

广告

1 个答案:

答案 0 :(得分:0)

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

$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());

你生活和学习啊!