getUser() in Logout with FOSUserBundle


getUser() in Logout with FOSUserBundle

我使用"success_handler"(在Symfony security.yml中)和onLogoutSuccess()与FOSUserBundle。但是我想获取User()以在闪存消息中添加他的名字。

服务和 PHP 类:

services:
    utilisateur_deconnexion:
        class: UtilisateurBundle'Handler'Deconnexion
        arguments: [@router]
class Deconnexion implements LogoutSuccessHandlerInterface
{
    private $router;
    public function __construct(RouterInterface $router)
    {
        $this->router = $router;
    }
    public function onLogoutSuccess(Request $request) 
    {
        $request->getSession()->getFlashBag()->add('success', 'Vous êtes à présent déconnecté.');
        return new RedirectResponse($this->router->generate('dometech_index_index'));
    }
}

你可以帮我吗?

您可以将@security.context服务注入到注销处理程序中。从SecurityContext中,您将能够获得当前设置的令牌对象,该对象是TokenInterface的实例。从TokenInterface实例中,您将能够获取当前用户。见下文。

服务.yml

services:
    utilisateur_deconnexion:
        class: UtilisateurBundle'Handler'Deconnexion
        arguments: ["@router", "@security.context"]

注销成功处理程序:

use Symfony'Component'Security'Core'SecurityContextInterface;
use Symfony'Component'Routing'RouterInterface;
class Deconnexion implements LogoutSuccessHandlerInterface
{
    private $router;
    private $securityContext;
    public function __construct(RouterInterface $router, SecurityContextInterface $securityContext)
    {
        $this->router = $router;
        $this->securityContext = $securityContext;
    }
    public function onLogoutSuccess(Request $request) 
    {
         // let's assume your user object has getUsername method
         $username = $this->securityContext->getToken()->getUser()->getUsername(); 
         $request->getSession()->getFlashBag()->add(
             'success', 
             sprintf('%s - Vous êtes à présent déconnecté.', $username)
         );
         return new RedirectResponse($this->router->generate('dometech_index_index'));
    }
 }

完成/更新 Symfony 3.x 的 @takeit 帖子

@security.context替换为@security.token_storage

服务.yml

services:
    utilisateur_deconnexion:
        class: UtilisateurBundle'Handler'Deconnexion
        arguments: ["@router", "@security.token_storage"]

注销成功处理程序:

[...]
    public function onLogoutSuccess(Request $request) 
    {
         // let's assume your user object has getUsername method
         $username = $this->tokenStorage->getToken()->getUsername(); 
         [...]
    }
[...]