我在这里走到了尽头。当我在控制器中保存任何类型的实体时,当前登录的用户的密码和盐在数据库中被清空。
这是我的安全配置的相关部分:
security:
encoders:
ISE\LoginBundle\Entity\User:
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
main:
entity:
class: ISE\LoginBundle\Entity\User
property: username
这是我的用户类的eraseCredentials方法。我怀疑在某些时候调用此方法,然后使用这些更改将用户对象保存到数据库。但我不知道那可能是什么:
class User implements UserInterface {
// ...
public function eraseCredentials() {
$this->password = null;
$this->salt = null;
}
// ...
}
这是我在一个控制器中保存实体的示例,在这种情况下,它是ProductController。只是提醒一下:我没有以任何方式操纵我的代码中的User对象:
public function createAction() {
// ...
if ($form->isValid()) {
$em = $this->get('doctrine')->getEntityManager();
$em->persist($product);
$em->flush();
return $this->redirect($this->generateUrl('product_create', array('created' => true)));
}
// ...
}
我不希望任何此代码删除数据库中的用户密码或salt,但确实如此。任何人都可以帮助我打败我的代码吗?
答案 0 :(得分:5)
Symfony在明文和散列凭证之间存在差异。在“eraseCredentials”中,您应该删除所有明文信息,而不是保存到数据库的散列凭证。