20

我已设置自定义错误页面以显示文件夹中的某些 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 页面按原样显示,并且毫无问题地使用了身份验证检查。

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

4

3 回答 3

16

如果 symfony < 2.8 :

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

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

从 15 年 12 月 17 日开始编辑:

从 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

于 2013-02-04T15:25:01.013 回答
12

自 2.1 起,您不能is_granted在 404 页面中使用:

升级文件中提到了

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

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

于 2012-09-28T16:44:58.447 回答
2

我建议检查app.security.token更严格,true即使用户是匿名的也可以进行评估。

如果您检查app.user它,它将false在异常模板中进行评估,但即使存在防火墙 = 常规模板)但用户未登录。这将阻止 - 例如 - 显示登录按钮。

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

于 2014-07-30T08:44:48.263 回答