Symfony2: аутентификация с использованием сущности Doctrine2 - пароль устанавливается на пустое значение после сохранения сущности - PullRequest
2 голосов
/ 09 июня 2011

Я зашел в тупик здесь. Когда я сохраняю любую сущность в моем контроллере, пароль и соль пользователя, который в данный момент вошел в систему, в базе данных не отображаются.

Это релевантная часть моей конфигурации безопасности:

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)));
    }
    // ...
}

Я не ожидал бы, что какой-либо из этого кода удалит пароль пользователя или соль в базе данных, но именно это и происходит. Может ли кто-нибудь помочь мне превратить мой код в представление?

1 Ответ

5 голосов
/ 09 июня 2011

Symfony имеет разницу между открытым текстом и хэшированными учетными данными.В «eraseCredentials» вы должны удалить всю информацию открытого текста, а не хешированные учетные данные, которые сохраняются в базе данных.

...