我正在处理一些非常基本的symfony示例并且在注销时遇到问题。请注意:这与cookie和基本身份验证无关。我试图设置/ admin防火墙以要求基本身份验证然后注销。这可以正常使用“pattern:/ admin注释掉但如果我取消注释则失败 - 消息”无法找到路径控制器“/ logout”。路由配置错误“。为什么模式条目会破坏注销?
文件内容如下:
的routing.yml
logout:
path: /logout
security.yml
security:
admin:
pattern: /admin
anonymous: ~
http_basic: ~
logout:
path: /logout
target: /
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
答案 0 :(得分:2)
取消注释模式:/admin
并修改logout
,如下所示
logout:
path: /admin/logout
所以,基本上你会有
security:
admin:
pattern: /admin
anonymous: ~
http_basic: ~
logout:
path: /admin/logout
target: /
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
这是因为Symfony希望您在"下进行注销操作。相同"模式"你的防火墙。
那是因为你没有定义任何控制器(当然你也不必这样做),并且框架需要一个至少与一个防火墙相匹配的网址(你不会这样做)。如果您有任何防火墙需要进行身份验证,那么需要注销吗?) 这是因为安全侦听器仅在请求与防火墙模式匹配时才会附加。
答案 1 :(得分:1)
一种解决方案是将其添加到routing.yml文件中:
_logout:
path: /logout
然后在security.yml:
security:
firewalls:
secured_area:
logout: ~
基本上,Symfony期望命名路由_logout,除非定义了其他模式。在我看来,最简单的方法是创建路线并给它一条路径。没有必要为路由提供默认控制器,因为Symfony将获取路由并知道如何处理它。希望有所帮助。