Cómo forzar el cierre de sesión del usuario Symfony2

2 minutos de lectura

avatar de usuario
Adil Ouchraa

Quiero obligar a un usuario a cerrar sesión en Symfony2 después de comprobar que no tiene suficientes capacidades para acceder a un área segura específica.

He probado con:

$this->get('request')->getSession()->invalidate();

pero parece que algo sale mal, el usuario aún inició sesión hasta que lo desconecté usando la ruta /logout.

Debo mencionar que estoy usando KayueWordpressBundle para conectar mi aplicación Symfony con un sitio web basado en wordpress para crear un back office personalizado.

Aquí está mi archivo security.yml

security:
firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    login_firewall:
        pattern:    ^/$
        anonymous:  ~
    secured_area:
        pattern:    ^/
        kayue_wordpress: ~
        form_login:
            check_path: /login_check
            login_path: /
        logout:
            path:   /logout
            target: /
access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }

providers:
    wordpress:
        entity: { class: Kayue\WordpressBundle\Entity\User, property: username }

encoders:
    Kayue\WordpressBundle\Entity\User:
        id: kayue_wordpress.security.encoder.phpass

¿Cómo puedo hacer esto por favor?

Gracias

  • posible duplicado de Symfony2: ¿cómo cerrar la sesión del usuario manualmente en el controlador?

    – Slava Fomin II

    2 de marzo de 2015 a las 15:38

avatar de usuario
satdev86

Puede forzar el cierre de sesión llamando setToken() con nullintenta algo como esto:

$this->container->get('security.context')->setToken(null);

Destruirá el token de usuario del contexto de seguridad y expulsará al usuario.


Además, consulte esta pregunta para obtener más detalles: Symfony2: ¿cómo cerrar la sesión del usuario manualmente en el controlador?

  • La solución dada anteriormente no llamará al controlador de cierre de sesión, si he registrado algún controlador para cerrar sesión.

    – Jaimín

    5 de marzo de 2015 a las 10:10

  • Por cierto, usa $this->container->get('security.authorization_checker') en cambio (nuevo en 2.6)

    – Ronan

    30 de agosto de 2015 a las 20:34

  • @Ronan, es $this->container->get('security.token_storage'). Ver Nuevo en Symfony 2.6: Mejoras en los componentes de seguridad.

    – Laurent W.

    26 de abril de 2016 a las 10:38

¿Ha sido útil esta solución?