启动symfony:注销

时间:2015-06-22 15:32:29

标签: security symfony

我正在处理一些非常基本的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 }

2 个答案:

答案 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将获取路由并知道如何处理它。希望有所帮助。