我已设置自定义错误页面以显示文件夹中的某些HTTP错误:
app/Resources/TwigBundle/views/Exception/
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') %}
如果我删除该检查并只允许显示所有菜单项,则页面会按预期加载错误页面。同样,403页面显示它应该并且使用auth检查没有问题。
我坚持这个。除文件名外,页面完全相同。
答案 0 :(得分:15)
如果symfony< 2.8:
{% if app.user is not null and is_granted('ROLE_ADMIN') %}
请参阅:https://github.com/symfony/symfony-docs/issues/2078
从2015年12月17日开始编辑:
自2.8以来不再需要这样做,
{% if is_granted('ROLE_ADMIN') %}
现在工作正常。
答案 1 :(得分:11)
自2.1以来,您无法在404页面中使用is_granted
:
升级文件中提到了
防火墙侦听器现在在路由器侦听器之后注册。这意味着特定的防火墙URL(如/ login_check和/ logout)现在必须在路由配置中定义正确的路由。此外,如果您有自定义404错误页面,请确保您不使用任何与安全性相关的功能,例如
is_granted
。
请参阅: https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#security
答案 2 :(得分:2)
我建议检查app.security.token
是否更严格,即使用户是匿名的,也要评估为true
。
如果您检查app.user
,它将评估异常模板中的false
,但即使防火墙 存在(=常规模板),但用户未被记录。这将阻止 - 例如 - 显示登录按钮。