Symfony 3防火墙保护区域混乱

时间:2018-02-06 20:20:41

标签: symfony login firewall

我希望通过防火墙保护,所以通过登录/会话来保护Symfony 3中的应用程序区域:

security:   
    firewalls:
        seller:
            pattern: ^/somearea
            form_login:
                login_path: /somearea/login
                check_path: /somearea/login
            logout:
                path: /somearea/logout
                target: /
            anonymous: false

access_control:
    - { path: ^/somearea/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/somearea, role: IS_AUTHENTICATED_FULLY }

但是,当我想去/ somearea区域时,应用程序会变得混乱,并且将会出现错误,并且会出现错误状态。#34; ERR_TOO_MANY_REDIRECTS"如果我愿意(实际上我不想要的话)在不在该区域后面的登录(例如./ some2login或其他任何不同),则表示登录必须以/ somearea开头。

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:2)

您通过设置anonymous: false禁止匿名访问,这就是access_control不会生效的原因。最简单的解决方案可能只是将该设置更改为anonymous: ~,因为^/somearea的后备访问控制将确保不允许匿名用户。

另一个解决方案是为登录设置一个单独的防火墙:

security:
    firewalls:
        login:
            pattern: ^/somearea/login$
            security: false
        seller:
            pattern: ^/somearea
            form_login:
                login_path: /somearea/login
                check_path: /somearea/login_check
            ...

登录表单将落入第一个不安全且始终可访问的防火墙,但在提交表单时,您将向/somearea/login_check发送与第一个防火墙不匹配的请求,但第二个防火墙请求试图用于安全的卖方区域。