44 votes

Symfony2 : comment déconnecter manuellement un utilisateur dans un contrôleur ?

Je voudrais faire quelque chose comme ça dans le contrôleur pour déconnecter l'utilisateur :

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

0voto

Daidon Points 366

Si vous utilisez symfony 4.x (je n'ai pas testé d'autres versions, donc cela peut toujours fonctionner), vous pouvez utiliser le gestionnaire de déconnexion interne de symfony (fortement recommandé, car il s'occupera de tout pour vous de manière propre, cookies et tout). Vous n'avez pas besoin d'écrire trop de code pour cela non plus, vous pouvez simplement émuler une demande de déconnexion :

... // Some code, that leads you to force logout the user 
// Emulating logout request
$logoutPath = $this->container->get('router')->generate('app_logout');
$logoutRequest = Request::create($logoutPath);
$logoutResponse = $this->container->get('http_kernel')->handle($logoutRequest);
// User is logged out now
... // Stuff to do after logging out, eg returning response

Cela permettra à Symfony de faire le flux de réponse à la demande, et donc d'appeler le gestionnaire de déconnexion en interne. Cette méthode vous permet de passer à du code personnalisé supplémentaire. Autrement, si vous invoquez uniquement le gestionnaire de déconnexion ici, vous devriez doivent renvoie la réponse habituelle de déconnexion, qui est maintenant en $logoutResponse . En option, si vous voulez le rendre, vous devez aussi simplement :

return $logoutResponse;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X