首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4:公共页面中的匿名令牌,即使在登录后也是如此

Symfony 4:公共页面中的匿名令牌,即使在登录后也是如此
EN

Stack Overflow用户
提问于 2018-11-19 03:08:11
回答 1查看 898关注 0票数 1

在我的网站上,我有3个部分:管理,会员和公众。Admin部分只能通过“gestult.%domain%”访问,并且必须有一个Admin用户。这一部分工作得很好。

对于Members部分,可以通过"membre.%domain%“访问,并且必须有一个成员用户。这也很有效。

问题出现在公共部分。此部分的每个部分都可以匿名访问或以成员用户的身份登录。登录后,顶部菜单会稍有变化,以显示更多选项(有点像任何购物网站)。

所以我将我的安全设置配置如下:

代码语言:javascript
复制
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“部分时,我可以正确地获取登录的用户。

我完全迷路了.

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 03:48:12

好了,我已经设法解决了我的问题。问题来自会话处理。因为我有多个子域,会话不是在它们之间共享的,所以我的公共部分不知道用户在成员部分登录。

我唯一需要配置的就是framework.yml中的会话参数:

代码语言:javascript
复制
session:
    handler_id: ~
    cookie_domain: '.%domain%'
    name: 'MYAPPSESSID'

编辑:这个答案帮助我找到并解决了这个问题:https://stackoverflow.com/a/29850083/1907465

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53364485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档