Php 在Symfony 3中使用不同的登录表单
以下设置: 我有两个不同的用户登录部分 第一个用户是普通用户(实体:AppBundle:user),第二个用户是管理员(实体:AppBundle:admin) 我有两种不同的登录路径,提供者、防火墙和编码器。 我可以以用户或管理员身份登录和注销,没有问题 问题是: 如果管理员已经登录,我需要他留在管理域,不能访问用户登录。同样对于普通用户,如果他已经以用户身份登录,则他不能以管理员身份登录 所以问题是,如果管理员登录,他仍然可以切换到用户登录域并以用户身份登录,会话将同时包含用户和管理员 security.yml:Php 在Symfony 3中使用不同的登录表单,php,authentication,login,symfony,roles,Php,Authentication,Login,Symfony,Roles,以下设置: 我有两个不同的用户登录部分 第一个用户是普通用户(实体:AppBundle:user),第二个用户是管理员(实体:AppBundle:admin) 我有两种不同的登录路径,提供者、防火墙和编码器。 我可以以用户或管理员身份登录和注销,没有问题 问题是: 如果管理员已经登录,我需要他留在管理域,不能访问用户登录。同样对于普通用户,如果他已经以用户身份登录,则他不能以管理员身份登录 所以问题是,如果管理员登录,他仍然可以切换到用户登录域并以用户身份登录,会话将同时包含用户和管理员 sec
providers:
admin_db_provider:
name: admin_provider
entity:
class: AppBundle:Admin
...
user_db_provider:
name: user_provider
entity:
class: AppBundle:User
...
firewalls:
admin_secured_domain:
pattern: ^/admin
anonymous: ~
provider: admin_provider
form_login:
login_path: admin.authentication
check_path: admin.authentication
username_parameter: userName
pasword_parameter: password
...
user_secured_domain:
pattern: ^/user
anonymous: ~
provider: user_provider
form_login:
login_path: user.authentication
check_path: user.authentication
username_parameter: userName
pasword_parameter: password
...
access_control:
- { path: ^/user/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
encoders:
...
我假设发生这种情况是因为我使用两个不同的提供者进行登录检查
当我以用户身份登录并访问管理员登录时,我可以在Symfony profiler中看到用户从“user”切换到“anon”。管理员也是如此,如果我以管理员身份登录并访问用户登录,它将从“admin”切换到“anon”
我只需要将它们重定向回其域,但此时我无法检查角色。您要查找的是“安全上下文” 见以下类似问题: 如果希望来自不同防火墙的用户共享相同的安全上下文,则必须为不同防火墙定义相同的上下文:
# app/config/security.yml
security:
# ...
firewalls:
admin_secured_domain:
# ...
context: my_context
user_secured_domain:
# ...
context: my_context
有关安全上下文,请参阅symfony文档:
大多数应用程序只需要一个防火墙。但是,如果您的应用程序确实使用多个防火墙,您会注意到,如果您在一个防火墙中进行了身份验证,则不会在另一个防火墙中自动进行身份验证。换句话说,这些系统并不共享一个共同的“上下文”:每个防火墙就像一个单独的安全系统