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

3

背景

根据Symfony文档,登录表单需要在security.yml文件中指定,还需要指定login_check路径。到目前为止,我的应用程序运行良好,用户尝试访问安全页面(mysite.com/edit/123),如果他们没有登录,则会重定向到/login,然后登录后再次重定向到原始意图的路径(/edit/123)。

类似问题:Symfony 2中的两个单独的登录页面

问题

现在的问题是,我需要一个不同的登录表单,比如/minimal_login,我需要在security.yml中包含它,但我知道的唯一方法是创建不同的防火墙,而且据我所见,这会创建一个单独的身份验证方案,因此我认为使用不同防火墙登录的用户不能共享相同的受保护页面,这不是我想要的。

需求

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


我的security.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

你在使用FOSUserBundle吗? - Mike
我正在使用默认系统。 - DomingoSL
2
我认为最好不要为同一应用程序设置多个登录URL,因为如果有任何更改(DRY),这将使工作量翻倍。相反,为什么不根据您的登录控制器中的URL呈现适当的模板呢? - Mike
1个回答

6

好的发现。我没有考虑到这个选项。 - Pierre de LESPINAY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接