Estou usando a configuração de segurança do Symfony. Tudo funciona bem, mas não sei como fazer uma coisa importante:
No galho, posso acessar as informações do usuário atual fazendo:
Welcome, {{ app.user.username }}
ou similar
Como acesso essas mesmas informações no controlador? Especificamente, desejo obter a entidade do usuário atual para poder armazená-la de forma relacional em outra entidade (mapeamento um a um).
Eu estava realmente esperando que fosse
$this->get('security.context')->getToken()->getUser()
mas isso não funciona. Isso me dá uma classe do tipo
Symfony\Component\Security\Core\User\User
e eu quero um do tipo
Acme\AuctionBundle\Entity\User
qual é a minha entidade ....
entity-framework
security
symfony
Robert Martin
fonte
fonte
Respostas:
Symfony 4+, 2019+ Abordagem
No symfony 4 (provavelmente 3.3 também, mas apenas testado em 4), você pode injetar o
Security
serviço via fiação automática no controlador desta forma:Symfony 2- Abordagem
Como o @ktolis diz, primeiro você precisa configurar o seu
/app/config/security.yml
.Então com
deve ser suficiente!
$user
é seu objeto de usuário! Você não precisa consultá-lo novamente.Descobrir a maneira de configurar seus fornecedores no
security.yml
de Documentação Sf2 e tente novamente.Boa sorte!
fonte
$user = $this->security->getUser();
,$user
é semprenull
para mim, conectado ou não.Melhor prática
De acordo com a documentação desde o Symfony 2.1, basta usar este atalho:
O exemplo acima ainda está funcionando no Symfony 3.2 e é um atalho para isso:
Exemplo : E se você quiser diretamente o nome de usuário:
Se tipo de classe de usuário errado
O usuário será um objeto e a classe desse objeto dependerá do seu provedor de usuários .
fonte
O tópico é um pouco antigo, mas acho que isso provavelmente poderia economizar o tempo de alguém ...
Encontrei o mesmo problema da pergunta original, que o tipo é mostrado como Symfony \ Component \ Security \ Core \ User \ User
Acabou que eu estava logado usando um usuário na memória
meu security.yml se parece com isso
o tipo de usuário in_memory é sempre Symfony \ Componente \ Segurança \ Núcleo \ Usuário \ Usuário, se você quiser usar sua própria entidade, efetue login usando o usuário desse fornecedor.
Obrigado hj
fonte
No symfony> = 3.2, a documentação afirma que:
Postagem sobre o blog
fonte
fonte
Bem, primeiro você precisa solicitar o nome de usuário do usuário da sessão em sua ação do controlador da seguinte maneira:
faça uma consulta ao banco de dados e obtenha seu objeto com dql regular como
o $ user agora deve reter o usuário com esse nome de usuário (você também pode usar outros campos)
... mas você deverá primeiro configurar sua configuração /app/config/security.yml para usar o campo apropriado para seu provedor de segurança da seguinte maneira:
espero que isto ajude!
fonte
$this->get('security.context')->getToken()->getUser()
ele recebe o objeto de usuário conectado. Você não precisa consultá-lo novamente. De fato, qual versão você estava usando?