Symfony 2中的两种不同的登录表单

时间:2013-01-11 13:19:54

标签: symfony

背景

根据Symfony文档,需要在security.yml文件中指定登录表单,也需要在login_check路径中指定。到目前为止,我的应用程序工作正常,用户尝试访问一个安全页面(mysite.com/edit/123),如果他们没有登录,他们将被重定向到/登录,他们登录后将再次重新发送到原始打算路径(/ edit / 123)。

类似的问题:Two separate login pages in Symfony 2

问题

现在的问题是,我需要一个不同的登录表单,让我们说/ minimal_login,我需要在security.yml上包含它,但我知道的唯一方法就是创建一个不同的防火墙,正如我在文档中看到的那样创建一个单独的识别方案,所以我想不同防火墙记录的用户不能共享相同的安全页面,这不是我想要的。

需要什么

如果用户尝试访问任何安全页面但/ popup将被重定向到/ login,但如果他们尝试访问/弹出(并且未记录),则会将其重定向到/ minimal_login。无论用户如何登录我的应用程序,他们将始终共享相同的访问权限,我的意思是,如果他们使用/ login或/ minimal_login登录,他们可以访问相同的页面。


我的secuity.yml

jms_security_extra:
    secure_all_services: false
    expressions: true

security:
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

    providers:
        main:
            entity: {class: Done\PunctisBundle\Entity\User, property: username}

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            remember_me:
                key: %secret%
                lifetime: 3600
                path: /
                domain: ~
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: /login
                check_path: /login_check
            logout:
                path:   /logout
                target: /


    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/signup, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/verification, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/popup/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ajax/track, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ajax/socialbox, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

    encoders:
        Done\PunctisBundle\Entity\User:
            algorithm:   md5
            iterations: 1
            encode_as_base64: false

1 个答案:

答案 0 :(得分:6)

我遇到了类似的问题,我使用firewall context配置解决了问题。

firewalls:
    somename:
        # ...
        context: my_context
    othername:
        # ...
        context: my_context

http://symfony.com/doc/current/reference/configuration/security.html#firewall-context