背景
根据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