twig - Symfony2 es_granted(''IS_AUTHENTICATED_FULLY'') durante la visualización de la página de error 404, lo que causa la excepción ResourceNotFoundException
symfony-2.1 (3)
No puedes usar is_granted
en una página 404 desde la 2.1:
Se menciona en el archivo de actualización
La escucha del Firewall ahora está registrada después de la escucha del Enrutador. Esto significa que las URL específicas del Firewall (como / login_check y / logout) ahora deben tener rutas adecuadas definidas en su configuración de enrutamiento. Además, si tiene una página de error 404 personalizada, asegúrese de no utilizar ninguna característica relacionada con la seguridad, como la que se
is_granted
en ella.
Consulte: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security
He configurado páginas de error personalizadas para mostrar ciertos errores HTTP en la carpeta:
app/Resources/TwigBundle/views/Exception/
La página 403 ( error403.html.twig
) funciona y se muestra como se esperaba.
La página 500 ( error500.html.twig
) funciona y se muestra como se esperaba.
La página 404 ( error404.html.twig
) arroja un error de 500 servidores:
Error grave de PHP: excepción no detectada ''Symfony / Component / Routing / Exception / ResourceNotFoundException''
El error se produce al realizar una verificación de autenticación para mostrar ciertos elementos del menú para los usuarios que están o no están autenticados:
{% if is_granted(''IS_AUTHENTICATED_FULLY'') %}
Si elimino esa comprobación y solo permito que se muestren todos los elementos del menú, la página carga la página de error como se esperaba. De nuevo, la página 403 se muestra como debería y utiliza las comprobaciones de autenticación sin ningún problema.
Estoy atascado en este. Las páginas son EXACTAMENTE las mismas, aparte del nombre de archivo.
Si Symfony <2.8:
{% if app.user is not null and is_granted(''ROLE_ADMIN'') %}
Consulte: https://github.com/symfony/symfony-docs/issues/2078
Edición desde el 17 de diciembre de 15:
Esto ya no es necesario desde 2.8,
{% if is_granted(''ROLE_ADMIN'') %}
Funciona bien ahora.
Yo sugeriría que verificar si app.security.token
es más estricto y se evalúe como true
incluso cuando el usuario es anónimo.
Si busca app.user
, se evaluará como false
en las plantillas de Excepción, pero incluso cuando el firewall está presente (= plantillas normales) pero el usuario no está registrado. Esto evitará, por ejemplo, la visualización de un botón de inicio de sesión.