Nuevo en Symfony 5.1: Personalizando la desconexión de los usuarios

Hace unos meses comenzamos a trabajar en una actualización masiva del componente de seguridad de Symfony y de su integración con el resto del framework. Todavía estamos trabajando en los cambios más importantes, pero ya tenemos listas algunas mejoras.

El LogoutListener actual se puede utilizar para ejecutar cierta lógica de negocio después de que los usuarios se desconecten de la aplicación (por ejemplo para invalidar algunos tokens de seguridad). Aunque ese listener se puede personalizar un poco, es bastante complicado hacerlo o incluso imposible en algunos casos (por ejemplo, para personalizar la desconexión de usuarios desde un bundle).

En Symfony 5.1 hemos mejorado esta funcionalidad con la introducción de un evento llamado LogoutEvent que reemplaza a los existentes LogoutSuccessHandlerInterface y LogoutHandlerInterface.

El nuevo evento se notifica tanto en el gestor de eventos global como en el de cada firewall (cuyo nombre sigue el patrón security.event_dispatcher.NOMBRE_DEL_FIREWALL). Así por ejemplo, si quieres registrar un listener para el evento logout solamente para el firewall main, utiliza la siguiente configuración:

# config/services.yaml
services:
    # ...
    App\EventListener\MyCutomLogoutListener:
        tags:
            - name: 'kernel.event_listener'
              event: 'Symfony\Component\Security\Http\Event\LogoutEvent'
              dispatcher: security.event_dispatcher.main

El objeto Symfony\\Component\\Security\\Http\\Event\\LogoutEvent recibido por el listener contiene métodos útiles como getToken() (para obtener el token de seguridad desde la sesión), getRequest() y setResponse().

Esta funcionalidad fue contribuida por Wouter De Jong en el pull request #36243.


Fuente: New in Symfony 5.1: Simpler logout customization

Comentarios

Publicada el

16 de abril de 2020

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.