-->

Symfony2的期间404错误页面显示is_granted( 'IS_AUTHENTICA

2019-06-26 20:55发布

我有安装自定义错误页,显示该文件夹中的某些HTTP错误:

app/Resources/TwigBundle/views/Exception/

403页( error403.html.twig如预期)的作品和显示器。

500页( error500.html.twig如预期)的作品和显示器。

404页( error404.html.twig )抛出一个500服务器错误:

PHP致命错误:未捕获的异常 '的Symfony \分量\路由\异常\ ResourceNotFoundException'

该错误被抛出做一个auth检查,并针对有或者没有身份验证的用户显示某些菜单项:

{% if is_granted('IS_AUTHENTICATED_FULLY') %}

如果我删除检查,只是让所有菜单项显示,该页面加载如预期的错误页面。 同样,403个显示,因为它应该和利用AUTH检查没有问题。

我坚持这一点。 该网页是完全一样的,除了文件名。

Answer 1:

你不能使用is_granted了404页,因为2.1:

它的升级文件中提到的

防火墙监听者现在是路由器监听后注册。 这意味着,特定防火墙的网址(例如/ login_check和/注销)现在必须在你的路由配置中定义的正确路线。 另外,如果你有一个自定义404错误页面,请确保您不使用任何安全相关的功能,如is_granted就可以了。

请参阅: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security



Answer 2:

如果symfony的<2.8:

{% if app.user is not null and is_granted('ROLE_ADMIN') %}

请参阅: https://github.com/symfony/symfony-docs/issues/2078

从12月17日'15编辑:

这不再是必要的,因为2.8,

{% if is_granted('ROLE_ADMIN') %}

现在工作得很好。

来源: http://symfony.com/blog/new-in-symfony-2-8-dx-improvements#allow-to-check-for-security-even-in-pages-not-covered-by-firewalls



Answer 3:

我建议检查app.security.token更加严格和评价true ,即使用户是匿名的。

如果您检查app.user将评估false的异常处理模板,但即使在防火墙的存在 (=常规模板),但用户没有登录。 这将防止 - 例如 - 登录按钮的显示。

请参阅: https://github.com/symfony/symfony-docs/pull/2359



文章来源: Symfony2 is_granted('IS_AUTHENTICATED_FULLY') during 404 error page display, causing ResourceNotFoundException