No puedo autenticar en symfony2 con la entidad 'Employee' ya que contiene muchos mapeos con otros entidades en mi proyecto. algunos de mis mapas son los siguientes:Excepción: Symfony Component Security Core Authentication Token UsernamePasswordToken :: serialize() debe devolver una cadena o NULL
/**
* @var EmployeeDesignation
*
* @ORM\ManyToOne(targetEntity="EmployeeDesignation")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="employee_designation_id", referencedColumnName="id")
* })
*/
private $employeeDesignation;
/**
* @var EmployeeDesignation
*
* @ORM\ManyToOne(targetEntity="EmployeeType")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="employee_type_id", referencedColumnName="id")
* })
*/
private $employeeType;
La autenticación funciona bien sin ningún mapeo. He tratado con 'Serialize()' y 'unserialize()' métodos en él, como a continuación:
class Employee implements AdvancedUserInterface, \Serializable{
/**
* serialize the username
* @return serialize
*/
public function serialize() {
return serialize($this->emailOfficial);
}
/**
* unserialize
* @param $data
*/
public function unserialize($data) {
$this->em = unserialize($data);
}
estoy recibiendo el siguiente error después de hacer el método anterior:
You cannot refresh a user from the EntityUserProvider that does not contain an identifier. The user object has to be serialized with its own identifier mapped by Doctrine.
me han tratado de esta manera con el fin de deshacerse del error anterior, que es la siguiente:
Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::serialize() must return a string or NULL
Por lo tanto, puede alguien por favor sugerir una manera de superar este problema?
Muchas gracias !!! ¡Muy útil! – Ben
me ha ahorrado mucho tiempo depurando, gracias –
Creo que este mensaje de error aparece cuando su entidad de usuario tiene una relación que vincula al usuario, por ejemplo: 'Usuario-> Artículo-> Autor' (' Usuario' tiene muchos 'Artículos 'y' Article' tiene 'User' como autor) y luego falla la serialización. Por eso, cuando serializas 'Usuario' usando solo la clave principal (id) todas las cosas se hacen bien. Entonces, usa la función '__sleep' y devuelve la clave primaria allí. – Dmitriy