symfony2 hacer definir crear como autenticacion entity-framework security symfony

entity framework - hacer - ¿Cómo obtengo la entidad que representa al usuario actual en Symfony2?



roles en symfony2 (6)

Mejores prácticas

De acuerdo con la documentación desde Symfony 2.1, simplemente use este atajo:

$user = $this->getUser();

Lo anterior todavía está funcionando en Symfony 3.2 y es un atajo para esto:

$user = $this->get(''security.token_storage'')->getToken()->getUser();

El servicio security.token_storage se introdujo en Symfony 2.6. Antes de Symfony 2.6, tenías que usar el getToken() del servicio security.context .

Ejemplo : Y si quiere directamente el nombre de usuario:

$username = $this->getUser()->getUsername();

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 .

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 de uno a uno).

Realmente estaba esperando 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 ...


Bueno, primero necesita solicitar el nombre de usuario del usuario de la sesión en su acción de controlador de esta manera:

$username=$this->get(''security.context'')->getToken()->getUser()->getUserName();

a continuación, haga una consulta al DB y obtenga su objeto con DQL regular como

$em = $this->get(''doctrine.orm.entity_manager''); "SELECT u FROM Acme/AuctionBundle/Entity/User u where u.username=".$username; $q=$em->createQuery($query); $user=$q->getResult();

el usuario $ debería ahora retener al usuario con este nombre de usuario (también podría usar otros campos por supuesto)

... pero primero tendrá que configurar su configuración de /app/config/security.yml para usar el campo apropiado para su proveedor de seguridad de la siguiente manera:

security: provider: example: entity: {class Acme/AuctionBundle/Entity/User, property: username}

¡espero que esto ayude!


Como dice ktolis, primero debes configurar tu /app/config/security.yml .

Entonces con

$usr= $this->get(''security.context'')->getToken()->getUser(); $usr->getUsername();

debería ser enougth!

$ usr es su objeto de usuario! No necesita volver a consultarlo.

Descubra la manera de configurar sus proveedores en security.yml desde Sf2 Documentation y vuelva a intentarlo.

¡La mejor de las suertes!

EDIT: desde symfony 2.6, el servicio security.context está en desuso, use el servicio security.token_storage como:

$this->get(''security.token_storage'')->getToken()->getUser()


El hilo es un poco viejo, pero creo que esto probablemente podría salvarle el 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

Eventualmente resultó que estaba conectado usando un usuario de memoria

mi security.yml se parece a esto

security: providers: chain_provider: chain: providers: [in_memory, fos_userbundle] fos_userbundle: id: fos_user.user_manager in_memory: memory: users: user: { password: userpass, roles: [ ''ROLE_USER'' ] } admin: { password: adminpass, roles: [ ''ROLE_ADMIN'', ''ROLE_SONATA_ADMIN'' ] }

el tipo de usuario in_memory siempre es Symfony / Component / Security / Core / User / User si desea usar su propia entidad, inicie sesión utilizando el usuario de ese proveedor.

Gracias, hj


En Symfony> = 3.2, la documentation indica que:

Una forma alternativa de obtener el usuario actual en un controlador es tipear-insinuar el argumento del controlador con UserInterface (y por defecto es nulo si el inicio de sesión es opcional):

use Symfony/Component/Security/Core/User/UserInterface/UserInterface; public function indexAction(UserInterface $user = null) { // $user is null when not logged-in or anon. }

Esto solo se recomienda para desarrolladores experimentados que no se extienden desde el controlador base de Symfony y tampoco usan ControllerTrait . De lo contrario, se recomienda seguir utilizando el acceso directo getUser ().

Publicación del blog al respecto


$this->container->get(''security.token_storage'')->getToken()->getUser();