#php #authentication #entity #doctrine-orm #symfony
#php #аутентификация #сущность #doctrine-orm #симфония
Вопрос:
Здесь я зашел в тупик. Когда я сохраняю какой-либо объект в своем контроллере, пароль и соль пользователя, который в данный момент вошел в систему, стираются в базе данных.
Это важная часть моей конфигурации безопасности:
security:
encoders:
ISELoginBundleEntityUser:
algorithm: sha1
iterations: 1
encode_as_base64: false
providers:
main:
entity:
class: ISELoginBundleEntityUser
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. Что такое
$product
? И, может быть,eraseCredentials
звонит, проверьте это2. $product — это экземпляр Product, объекта, который я сохраняю. Как я уже сказал, это происходит всякий раз, когда я сохраняю любую сущность в моем контроллере.
Ответ №1:
В Symfony есть разница между открытым текстом и хэшированными учетными данными. В «eraseCredentials» предполагается удалить всю информацию открытого текста, а не хэшированные учетные данные, которые сохраняются в базе данных.
Комментарии:
1. а, понятно. Значит, я могу просто оставить eraseCredentials пустым до тех пор, пока в пользовательском объекте есть только хэшированные учетные данные?