2 votes

Symfony 2.8 FOSUserBundle supprimer les cookies à la déconnexion

Je dois supprimer quelques cookies supplémentaires lorsque l'utilisateur se déconnecte. Comment puis-je faire cela?

entrer la description de l'image ici

J'ai cela dans mon config.yml

logout:
            path: /logout
            handlers: [logout_handler]
            delete_cookies:
                c_user: { path: /, domain: .facebook.com }
                sb: { path: /, domain: .facebook.com }
                xs: { path: /, domain: .facebook.com }
                fr: { path: /, domain: .facebook.com }
                pl: { path: /, domain: .facebook.com }
                lu: { path: /, domain: .facebook.com }
                datr: { path: /, domain: .facebook.com }
                dats: { path: /, domain: .facebook.com }
                pnl_data: { path: /, domain: www.facebook.com }

Mais cette option "delete_cookies" ne fonctionne pas. J'ai également le gestionnaire de déconnexion au cas où cela aiderait. Je ne sais pas vraiment quoi écrire là-bas cependant.

2voto

lordrhodos Points 1729

Assurez-vous d'avoir votre configuration dans le fichier security.yml sous l'une des sections de votre pare-feu, et consultez la configuration de sécurité complète pour 2.8 comme référence :

# app/config/security.yml
security:
    firewalls:
        somename:
            logout:
                delete_cookies:
                    a: { path: null, domain: null }
                    b: { path: null, domain: null }
                handlers: [some.service.id, another.service.id]
                success_handler: some.service.id
            anonymous: ~

Comme vous l'avez mentionné dans le gestionnaire de succès de la déconnexion, vous pouvez effectuer des traitements supplémentaires :

Si vous avez besoin de faire quelque chose de plus intéressant après la déconnexion, vous pouvez spécifier un gestionnaire de succès de déconnexion en ajoutant une clé success_handler et en la pointant vers l'identifiant de service d'une classe qui implémente LogoutSuccessHandlerInterface. Voir la référence de configuration de sécurité.

Consultez le \Symfony\Component\Security\Http\Logout\CookieClearingLogoutHandler qui supprime tous les cookies demandés via les en-têtes de réponse

/**
 * Implémentation pour l'interface LogoutHandlerInterface. Supprime tous les cookies demandés.
 *
 * @param Request        $request
 * @param Response       $response
 * @param TokenInterface $token
 */
public function logout(Request $request, Response $response, TokenInterface $token)
{
    foreach ($this->cookies as $cookieName => $cookieData) {
        $response->headers->clearCookie($cookieName, $cookieData['path'], $cookieData['domain']);
    }
}

Donc à l'intérieur de votre gestionnaire, vous pourriez faire quelque chose comme :

$response = new Symfony\Component\HttpFoundation\Response();
$response->headers->clearCookie('nomDuCookie');
$response->send();

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