我向数据库中添加了一个用户。
我使用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());
你生活和学习啊!