Php Symfony登录不适用于具有相同模式的多个防火墙

Php Symfony登录不适用于具有相同模式的多个防火墙,php,regex,security,symfony,Php,Regex,Security,Symfony,我有一个关于symfony安全的问题 My security.yml的设置如下: security: encoders: Symfony\Component\Security\Core\User\User: plaintext OVB\DBBundle\Entity\User\User: id: ovb.password.encoder providers: in_memory: m

我有一个关于symfony安全的问题

My security.yml的设置如下:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
        OVB\DBBundle\Entity\User\User:
            id: ovb.password.encoder

    providers:
        in_memory:
            memory:
                users:
                    test:  { password: ******, roles: 'ROLE_ADMIN' }
        main:
            entity:
                class: OVB\DBBundle\Entity\User\User
                property: email

    firewalls:
        secured_area:
            provider: in_memory
            pattern:   ^/
            anonymous: ~
            http_basic:
                realm: "Secured Test Area"
        main:
            pattern: ^/
            provider: main
            form_login:
                login_path:         /login
                check_path:         ovb_login_check
                use_referer:        true
            logout:                 true
            anonymous:              ~
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

    access_control:
        - { path: ^/, roles: ROLE_ADMIN }
        - { path: ^/login_check, roles: ROLE_USER }
如你所见,我有两个相同模式的防火墙。第一个(安全区域)是保护我的测试环境(HTTP身份验证),第二个是针对普通网站用户(表单登录)。 单独而言,它们都能工作,但在一起却不能,我认为这是因为它们使用相同的模式。 有人知道怎么做吗


谢谢大家!

在你的基地
security.yml

security:

    #...

    providers:
        main:
            entity:
                class:    'OVB\DBBundle\Entity\User\User'
                property: email

        dev:
           memory:
               users:
                   admin: { password: ******, roles: 'ROLE_ADMIN' }

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

        main:
            pattern: ^/
            provider: main
            form_login:
                login_path:         /login
                check_path:         ovb_login_check
                use_referer:        true
            logout:                 true
            anonymous:              ~
security:
    firewalls:
        main:
            http_basic:
                provider: dev

在您的
安全\u dev.yml
中:

security:

    #...

    providers:
        main:
            entity:
                class:    'OVB\DBBundle\Entity\User\User'
                property: email

        dev:
           memory:
               users:
                   admin: { password: ******, roles: 'ROLE_ADMIN' }

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

        main:
            pattern: ^/
            provider: main
            form_login:
                login_path:         /login
                check_path:         ovb_login_check
                use_referer:        true
            logout:                 true
            anonymous:              ~
security:
    firewalls:
        main:
            http_basic:
                provider: dev

为什么要创建两个具有相同模式的防火墙?正如我所说,第一个(安全区域)是专门针对我的开发环境的,我不希望其他人能够访问它。但我仍然希望能够在此环境中测试常规用户登录。当网站上线时,我将删除“安全区域”防火墙此管理员用户是否与a
OVB\DBBundle\Entity\user\user
一样使用网站?管理员用户(或测试用户)是否能够访问整个网站。普通用户专门用于在网站上发布内容和更改信息。所以不,现在(在测试环境中)需要管理员用户访问网站,不需要普通用户(仅用于发布到网站)使用标准登录表单的管理员用户不是更好的选择吗?它不完全符合我的要求,但它确实给了我另一个可行的想法。我在default security.yml文件中设置了“secured_area”防火墙,在dev security文件中设置了主防火墙,并让它覆盖“secured_area”防火墙。