背景
根据 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 登录,他们可以访问相同的页面。
我的安全.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