Estoy usando la configuración de seguridad de Symfony. Todo funciona bien, pero no sé cómo hacer una cosa importante:
En Twig, puedo llegar a la información del usuario actual haciendo:
Welcome, {{ app.user.username }}
o similar
¿Cómo accedo a esta misma información en el controlador? Específicamente, quiero obtener la entidad de usuario actual para poder almacenarla relacionalmente en otra entidad (mapeo uno a uno).
Realmente esperaba que fuera
$this->get('security.context')->getToken()->getUser()
Pero eso no funciona. Me da una clase de tipo
Symfony\Component\Security\Core\User\User
y quiero uno de tipo
Acme\AuctionBundle\Entity\User
cual es mi entidad ...
entity-framework
security
symfony
Robert Martin
fuente
fuente
Respuestas:
Symfony 4+, enfoque 2019+
En Symfony 4 (probablemente también 3.3, pero solo probado en 4) puede inyectar el
Security
servicio a través del cableado automático en el controlador de esta manera:Symfony 2- Enfoque
Como dice @ktolis, primero debes configurar tu
/app/config/security.yml
.Luego con
debería ser suficiente!
$user
es tu objeto de usuario! No necesita consultarlo nuevamente.Descubra la forma de configurar sus proveedores
security.yml
desde la Documentación Sf2 e intente nuevamente.¡La mejor de las suertes!
fuente
$user = $this->security->getUser();
,$user
siempre esnull
para mí, esté o no conectado.Mejores prácticas
De acuerdo con la documentación desde Symfony 2.1, simplemente use este acceso directo:
Lo anterior aún funciona en Symfony 3.2 y es un atajo para esto:
Ejemplo : y si desea directamente el nombre de usuario:
Si el tipo de clase de usuario es incorrecto
El usuario será un objeto y la clase de ese objeto dependerá de su proveedor de usuario .
fuente
El hilo es un poco viejo, pero creo que esto probablemente podría ahorrarle tiempo a alguien ...
Me encontré con el mismo problema que la pregunta original, que el tipo se muestra como Symfony \ Component \ Security \ Core \ User \ User
Finalmente resultó que estaba conectado usando un usuario en memoria
my security.yml se parece a esto
el tipo de usuario in_memory siempre es Symfony \ Component \ Security \ Core \ User \ User si desea utilizar su propia entidad, inicie sesión con el usuario de ese proveedor.
Gracias hj
fuente
En Symfony> = 3.2, la documentación indica que:
Publicación de blog al respecto
fuente
fuente
Bueno, primero debe solicitar el nombre de usuario del usuario de la sesión en la acción de su controlador de esta manera:
luego haga una consulta a la base de datos y obtenga su objeto con dql regular como
el $ user ahora debería mantener al usuario con este nombre de usuario (también podría usar otros campos, por supuesto)
... pero primero deberá configurar su /app/config/security.yml para usar el campo apropiado para su proveedor de seguridad de la siguiente manera:
¡espero que esto ayude!
fuente
$this->get('security.context')->getToken()->getUser()
en sí mismo le proporciona el objeto de usuario conectado. No tiene que volver a consultarlo. De hecho, ¿qué versión estabas usando?