【问题标题】:InvalidConfigurationException with Symfony2 security configuration带有 Symfony2 安全配置的 InvalidConfigurationException
【发布时间】:2015-08-04 08:14:28
【问题描述】:

这是我的 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: ~

一切正常,但是当我将 ^/account 防火墙更改为使用 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 防火墙。
  2. ^/admin/login 防火墙需要 http_basic,因此用户需要输入他们的用户名和密码才能查看 ^/admin/login 表单。
  3. 输入 ^/account,因为 ^/account 防火墙需要 form_login,所以它会重定向到 ^/login(主防火墙)

不知道上面的场景是否正确?如何修复此错误?请帮帮我,谢谢!

【问题讨论】:

    标签: php security symfony


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢,效果很好!! Symfony2 安全组件如此复杂,我认为 Symfony2 团队需要添加更多关于该组件的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2021-08-28
    • 2016-06-07
    • 2022-12-07
    • 1970-01-01
    相关资源
    最近更新 更多