Symfony2:使用Doctrine2实体进行身份验证 - 保存实体后密码设置为空值

Tob*_*ies 2 php authentication entity symfony doctrine-orm

我在这里走到了尽头.当我在控制器中保存任何类型的实体时,当前登录的用户的密码和盐在数据库中被消隐.

这是我的安全配置的相关部分:

security:
    encoders:
        ISE\LoginBundle\Entity\User:
            algorithm: sha1
            iterations: 1
            encode_as_base64: false
    providers:
        main:
            entity:
                class: ISE\LoginBundle\Entity\User
                property: username
Run Code Online (Sandbox Code Playgroud)

这是我的用户类的eraseCredentials方法.我怀疑在某些时候调用此方法,然后使用这些更改将用户对象保存到数据库.但我不知道那可能是什么:

class User implements UserInterface {
    // ...
    public function eraseCredentials() {
        $this->password = null;
        $this->salt = null;
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这是我如何在我的一个控制器中保存实体的示例,在这种情况下它是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)));
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我不希望任何此代码删除数据库中的用户密码或salt,但确实如此.任何人都可以帮我打败我的代码吗?

beb*_*lei 5

Symfony在明文和散列凭证之间有区别.在"eraseCredentials"中,您应该删除所有纯文本信息,而不是保存到数据库的散列凭证.