在我的网站上,我有3个部分:管理,会员和公众。Admin部分只能通过“gestult.%domain%”访问,并且必须有一个Admin用户。这一部分工作得很好。
对于Members部分,可以通过"membre.%domain%“访问,并且必须有一个成员用户。这也很有效。
问题出现在公共部分。此部分的每个部分都可以匿名访问或以成员用户的身份登录。登录后,顶部菜单会稍有变化,以显示更多选项(有点像任何购物网站)。
所以我将我的安全设置配置如下:
security:
providers:
membre_provider:
id: App\Security\Provider\MembreProvider
manager_provider:
id: App\Security\Provider\ManagerProvider
encoders:
App\Entity\Utilisateur: sha512
role_hierarchy:
ROLE_MEMBRE: [ROLE_NON_MEMBRE]
ROLE_SUPER_ADMIN: [ROLE_ADMIN]
ROLE_ADMIN: [ROLE_EDITEUR]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin:
host: 'gestion.%domain%'
pattern: .*
anonymous: ~
form_login:
login_path: admin_login
check_path: admin_login
access_denied_url: admin_access_denied
provider: manager_provider
logout:
path: admin_logout
target: admin_login
main:
pattern: .*
anonymous: true
form_login:
login_path: membre_login
check_path: membre_login
access_denied_url: membre_login
provider: membre_provider
user_checker: App\Security\MembreUserChecker
logout:
path: membre_logout
target: index
remember_me:
secret: '%kernel.secret%'
name: 'remember_me_main'
lifetime: 604800 # 1 week in seconds
path: /
always_remember_me: true
access_control:
- { path: ^/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'membre.%domain%' }
- { path: ^/demande_reinitialisation, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'membre.%domain%' }
- { path: ^/reinitialisation, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'membre.%domain%' }
- { path: ^/, roles: ROLE_NON_MEMBRE, host: 'membre.%domain%'}
- { path: ^/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'gestion.%domain%' }
- { path: ^/, roles: ROLE_EDITEUR, host: 'gestion.%domain%'}
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY}如您所见,我有管理上下文和主上下文。主上下文在"Members“部分和"Public”部分之间共享。在测试它时,它确实可以正常工作(在分析器的"Security“选项卡中,两者都显示为"main”上下文)。
问题是,当我试图在公共部分获取登录的用户信息时,我总是得到匿名令牌(它甚至在分析器中显示匿名令牌),但是当我在"Members“部分时,我可以正确地获取登录的用户。
我完全迷路了.
发布于 2018-11-19 03:48:12
好了,我已经设法解决了我的问题。问题来自会话处理。因为我有多个子域,会话不是在它们之间共享的,所以我的公共部分不知道用户在成员部分登录。
我唯一需要配置的就是framework.yml中的会话参数:
session:
handler_id: ~
cookie_domain: '.%domain%'
name: 'MYAPPSESSID'编辑:这个答案帮助我找到并解决了这个问题:https://stackoverflow.com/a/29850083/1907465
https://stackoverflow.com/questions/53364485
复制相似问题