Nuevo en Symfony 4.4: Firewalls diferidos

En el componente Security de Symfony, los firewalls configuran la forma en la que los usuarios se autentican (por ejemplo, mediante un formulario de login, un token de una API, etc.) Los firewalls también definen en qué URLs se aplica cada firewall y también si los usuarios anónimos pueden acceder o no a esas URLs:

# config/packages/security.yaml
security:
    # ...
    firewalls:
        main:
            pattern: ^/
            anonymous: ~
            # ...

Cuando se configura un firewall de tipo stateful, en cada petición se crea un token en la sesión para representar al usuario. Esto se hace incluso aunque esa determinada petición no utilice el usuario para nada. El problema es que debido al uso de la sesión, todas esas peticiones no son cacheables.

Para solucionar este problema, en Symfony 4.4, puedes definir lazy como valor de la opción anonymous de los firewalls:

# config/packages/security.yaml
security:
    # ...
    firewalls:
        main:
            pattern: ^/
            anonymous: lazy
            # ...

El valor lazy le dice a Symfony que solo cargue el usuario (y por tanto, que solo cree la sesión) si la aplicación utiliza realmente el objeto del usuario (por ejemplo mediante una llamada a is_granted() en la plantilla o isGranted() en un controlador o servicio). De esta forma, todas esas URLs que no usan el usuario serán públicas y puedes cachearlas, mejorando el rendimiento de la aplicación.

Esta funcionalidad fue contribuida por Nicolas Grekas en el pull request #33676.


Fuente: New in Symfony 4.4: Lazy Firewalls

Comentarios

Publicada el

6 de noviembre de 2019

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.