404错误页面显示期间Symfony2 is_granted('IS_AUTHENTICATED_FULLY'),导致ResourceNotFoundException

Nic*_*ick 19 twig symfony-2.1

我已设置自定义错误页面以显示文件夹中的某些HTTP错误:

app/Resources/TwigBundle/views/Exception/
Run Code Online (Sandbox Code Playgroud)

403页面(error403.html.twig)按预期工作和显示.

500页(error500.html.twig)工作并按预期显示.

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

PHP致命错误:未捕获异常'Symfony\Component\Routing\Exception\ResourceNotFoundException'

通过执行身份验证来显示已经或未经过身份验证的用户的某些菜单项,从而引发错误:

{% if is_granted('IS_AUTHENTICATED_FULLY') %}
Run Code Online (Sandbox Code Playgroud)

如果我删除该检查并只允许显示所有菜单项,页面将按预期加载错误页面.同样,403页面显示它应该并且使用auth检查没有问题.

我坚持这个.除文件名外,页面完全相同.

Tse*_*eho 16

如果symfony <2.8:

{% if app.user is not null and is_granted('ROLE_ADMIN') %}
Run Code Online (Sandbox Code Playgroud)

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

编辑自2015年12月17日:

自2.8以来不再需要这个,

{% if is_granted('ROLE_ADMIN') %}
Run Code Online (Sandbox Code Playgroud)

现在工作正常.

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


Jer*_*oen 12

is_granted自2.1以来,您无法在404页面中使用:

它在升级文件中提到

防火墙侦听器现在在路由器侦听器之后注册.这意味着特定的防火墙URL(如/ login_check和/ logout)现在必须在路由配置中定义正确的路由.此外,如果您有自定义404错误页面,请确保不使用任何与安全性相关的功能is_granted.

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