【问题标题】:Session lost during impersonation模拟期间会话丢失
【发布时间】:2013-08-02 00:22:07
【问题描述】:

我在config.yml 中使用配置了sonata_user 的SonataAdminBundle:

sonata_user:
    impersonating:
        route:        _profile_logged
    # more config

我的管理面板位于/admin 前缀下。我已经用impersonating 字段配置了UserAdmin(基于User 实体)。我尝试通过单击管理面板中的链接来模拟用户,我看到了应用程序(不是管理面板)登录页面。

我检查了开发人员工具栏,我注意到模拟用户的请求被重定向到登录页面。这很奇怪,因为此请求与前一个请求具有大部分相同的参数(用于管理面板中的用户列表)。特别是Request Cookies 部分是相同的。

我注意到Request Headers 的一个不同之处:第一个请求(用于管理面板中的用户列表)发送cache-control max-age=0,但第二个请求(用于模拟)不发送。

显然,我以完全权限(尤其是ROLE_ALLOWED_TO_SWITCH)登录了用户的管理面板。

那么,我怎样才能直接从管理面板进行模拟?我的应用可能有什么问题?

【问题讨论】:

    标签: session symfony sonata-admin sonata-user-bundle


    【解决方案1】:

    你可以试试config.yml:

    sonata_user:
        ...
        impersonating:
            route:                sonata_admin_dashboard
    

    security.yml:

    security:
        ...
        firewalls:
            ...
            admin:
                ...
                switch_user:        true
    

    这些对我有用。

    【讨论】:

    • 是的,我有类似的配置。不幸的是对我不起作用。防火墙之间共享安全上下文可能存在问题。我会检查一下。
    【解决方案2】:

    我检测到一个问题:

    4.多个防火墙不共享安全上下文表单文档:http://symfony.com/doc/current/book/security.html#book-security-common-pitfalls

    找到了解决办法:

    防火墙上下文来自文档:http://symfony.com/doc/current/reference/configuration/security.html#reference-security-firewall-context

    因此,如果您为应用程序和管理面板设置了单独的防火墙,则需要定义防火墙上下文。

    【讨论】:

    • 太棒了!将context: user 添加到两个防火墙使模拟工作!
    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 2015-04-18
    • 1970-01-01
    • 2013-08-10
    • 2012-05-09
    相关资源
    最近更新 更多