【发布时间】:2016-08-30 13:11:31
【问题描述】:
每当我故意 - 尝试自定义错误页面 - 尝试访问未定义的路由时,服务器都会以 500 错误响应。日志说:
request.CRITICAL:处理异常时抛出异常(Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException:令牌存储不包含身份验证令牌。一个可能的原因是没有为此配置防火墙网址。
此异常在 NotFoundException 之后引发,因此出现 500 错误。 因此,我试图弄清楚如何为任何 URL 配置防火墙,尤其是为所有已经被防火墙处理的 URL,以便可以实际找到凭据。我想出了这个 UserBundle/Resources/config/security.yml :
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt))/
security: false
public:
pattern: ^/(contact/faq)$
anonymous: true
secure:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
login_path: fos_user_security_login
check_path: fos_user_security_check
use_forward: false
failure_path: null
default_target_path: /
remember_me: true
logout:
path: fos_user_security_logout
target: /
anonymous: true
remember_me:
secret: %secret%
name: whatev
lifetime: 31536000
path: /
remember_me_parameter: _remember_me
secure: true
always_remember_me: true
default:
anonymous: true
所有内容都导入到我的主安全文件中,其中包括:
imports:
- { resource: "@UserBundle/Resources/config/security.yml" }
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } # my try to match all routes...
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/administration/, role: ROLE_ADMIN }
- { path: ^/user$, role: IS_AUTHENTICATED_FULLY }
这是我在 app/Resources/TwigBundle/views/Exception 下的 error.html.twig :
<!DOCTYPE html>
<html>
<head>
<meta charset="{{ _charset }}" />
<title>An Error Occurred: {{ status_text }}</title>
</head>
<body>
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "{{ status_code }} {{ status_text }}".</h2>
<div>
Something is broken. Please let us know what you were doing when this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience caused.
</div>
</body>
</html>
关于如何进行的任何线索?
非常感谢。
【问题讨论】:
-
你能给我们看看你的
error.twig(或任何你用于404错误的)模板吗? -
我知道在视图中使用 is_granted() 时可能会出现问题,但我不是。无论如何,我进行了编辑以向您展示我的观点。
-
您是否创建了一个使用
AuthorizationChecker::isGranted的事件侦听器,并在注册防火墙事件之前调度(优先级 -
哦,很好看!这确实是我的问题。我有一个事件侦听器,它侦听优先级为 0 的 kernel.controller 事件。当我从服务中删除此侦听器时,会捕获 NotFoundException。但是,我尝试将此事件侦听器的优先级设置为大于或小于 8(通过 app/console debug:event-dispatcher 检查),并且在任何一种情况下更新后都会返回 500 错误。我该怎么办?
-
kernel.controller事件应该没有问题(即使优先级为 0,因为它是在 kernel.request 之后调度的,因此是在防火墙侦听器之后调度的) - 我可以看看那个侦听器?你是如何在容器中注册的?
标签: php symfony security routes firewall