2012-08-08 12 views
17

Tengo páginas personalizadas de error de configuración para mostrar para ciertos errores HTTP en la carpeta:Symfony2 is_granted ('IS_AUTHENTICATED_FULLY') durante la visualización de la página de error 404, causando ResourceNotFoundException

app/Resources/TwigBundle/views/Exception/ 

La página 403 (error403.html.twig) obras y pantallas como se esperaba.

La página 500 (error500.html.twig) funciona y se muestra como se esperaba.

La página 404 (error404.html.twig) genera un error 500 de servidor:

PHP Fatal error: Uncaught exception 'Symfony\Component\Routing\Exception\ResourceNotFoundException'

El error está siendo lanzada por hacer una comprobació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 verificación y solo dejo que se muestren todos los elementos del menú, la página carga la página de error como se esperaba. Una vez más, la página 403 se muestra como debería y utiliza los controles de autenticación sin ningún problema.

Estoy atascado en este caso. Las páginas son EXACTAMENTE iguales, aparte del nombre del archivo.

+0

¿Qué versión de Symfony está usando? – j0k

+0

Lo último y lo mejor. 2.1-dev creo que – Nick

+2

Creo que sería mejor (debido a la versión -dev) crear un problema en github, los tipos de Symfony son realmente útiles :) – dmirkitanov

Respuesta

10

no puede utilizar el is_granted en una página 404 desde la versión 2.1:

Es mencionado en el archivo de actualización

The Firewall listener is now registered after the Router listener. This means that specific Firewall URLs (like /login_check and /logout) must now have proper routes defined in your routing configuration. Also, if you have a custom 404 error page, make sure that you do not use any security related features such as is_granted on it.

Ver: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security

+0

Sí, lo agregaron a la documentación después de haber recibido varias publicaciones en GitHub ... Todavía no soy un gran admirador de cómo se maneja esto. – Nick

+0

[Symfony 2.8 detecta la excepción, y en su lugar devolverá falso] (https://github.com/symfony/symfony/pull/15953). Así que no hay más error, pero puede no ser el comportamiento que desea. – gapple

2

que sugeriría la comprobación de app.security.token a ser más estrictos y evaluar a true incluso cuando el usuario es anónimo.

Si marca para app.user se evaluará false en las plantillas de excepción, pero incluso cuando el servidor de seguridad es presente (= plantillas normales) pero el usuario no está conectado. Esto evitará, por ejemplo, la visualización de un botón de inicio de sesión.

Ver: https://github.com/symfony/symfony-docs/pull/2359

Cuestiones relacionadas