使用Symfony2安全配置的InvalidConfigurationException

时间:2015-08-04 08:14:29

标签: php security symfony

这是我的security.yml

security:
    providers:
        in_memory:
            memory: ~

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        admin_login:
            pattern: ^/admin/login$
            http_basic: ~

        admin:
            pattern: ^/admin
            form_login:
                login_path: /admin/login
                check_path: /admin/loginCheck

        account:
            pattern: ^/account
            http_basic: ~

            # form_login:
            #     login_path: /login
            #     check_path: /loginCheck

        main:
            anonymous: ~

一切都还可以但是当我改变^ /帐户防火墙以使用form_login而不是http_basic时,它会抛出一些例外:

 1/2 LogicException in MainConfiguration.php line 333: The check_path "/loginCheck" for login method "form_login" is not matched by the firewall pattern "^/account".
 2/2 InvalidConfigurationException in BaseNode.php line 313: Invalid configuration for path "security.firewalls.account": The check_path "/loginCheck" for login method "form_login" is not matched by the firewall pattern "^/account". 

我知道Symfony2文档建议只使用一个且只有一个主防火墙,但此配置仅用于研究多个防火墙。

我认为情景:

  1. 输入^ / admin,因为^ / admin防火墙需要form_login,因此它会重定向到^ / admin / login firewall。
  2. ^ / admin / login防火墙需要http_basic,因此用户需要输入他们的用户名&密码见^ / admin / login form。
  3. 输入^ / account,因为^ /帐户防火墙需要form_login,因此它会重定向到^ / login(主防火墙)
  4. 我不知道上面的情况是否正确?如何解决这个错误?请帮帮我,谢谢!

1 个答案:

答案 0 :(得分:2)

如果我是对的,则无法在一个防火墙上进行身份验证,然后在第二个防火墙上使用该令牌。一旦安全组件对您进行身份验证,它就会停止处理其他防火墙。

拥有多个防火墙是完全合法的,但它们的上下文将完全分开。

对于错误,Symfony2规定URL的登录表单必须在防火墙前缀内。如果您的防火墙以/account/为前缀,则您的登录表单必须是该前缀下的内容,例如/account/login。然后,使用security.yml底部的访问控制列表,您应该anonymous访问该登录表单。

希望这能澄清一些事情......