Symfony 3.4 如何退出 switch_user?

Posted

技术标签:

【中文标题】Symfony 3.4 如何退出 switch_user?【英文标题】:How can you exit a switch_user by Symfony 3.4? 【发布时间】:2019-12-04 15:30:12 【问题描述】:

我有一个可以从用户切换的项目。模仿者工作,但我不能离开模仿者。因此,我一直使用要切换的用户登录。

例如:用户 A 登录并切换到用户 B。当他们点击 /?_switch_user=_exit 时,您希望该用户回到用户 A。但用户留在用户 B。

可能是什么问题?

我已将这些信息包含在 security.yml 中:

firewalls:
        main:
            pattern: ^/
            two_factor:
                auth_form_path: 2fa_login
                check_path: 2fa_login_check
            form_login:
                provider: fos_userbundle
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                default_target_path: homepage
                always_use_default_target_path: false #true
                #csrf_token_generator: security.csrf.token_manager
            logout:
                path:   fos_user_security_logout
                target: /
            anonymous:    true
            logout_on_user_change: false
            switch_user:  role: ROLE_ADMIN 

更新:用户 A 是 ROLE_ADMIN,B 是 ROLE_CONSUMER

路由:

home_redirect:
    path:     /_locale
    defaults:  _controller: AppBundle:Default:index, _locale: 'nl' 
    requirements:
        _locale:  nl|en|fr
app:
    resource: '@AppBundle/Controller/'
    prefix:   /_locale
    defaults: _locale: 'nl'
    type: annotation
    requirements:
        _locale:  nl|en|fr

更新 2: 重定向到退出的错误是什么: error of wrong user

感谢您的帮助!

【问题讨论】:

【参考方案1】:

由于您使用 /?_switch_user=_exit 链接到 root,请确保您的防火墙定义涵盖该路径:

        main:
            pattern: ^/

【讨论】:

感谢您的反应。但这一切都已准备好添加到防火墙中。请参阅我的要求了解更多信息 @PatrickVollenbroek 当您尝试退出链接时,您的调试分析器会说什么? 我已经在上面的消息中给出了回复。可以看到有错误。但我不知道这是怎么发生的。 Url 是 /nl/admin,在防火墙中保持 /.../admin 仅适用于 Admin 你有什么想法吗? @PatrickVollenbroek 似乎是您如何配置 FOSUserBundle 的一个潜在问题。你能分享你的配置吗(fos_user.yaml?)你对“fos_user.user_class”的配置是什么?

以上是关于Symfony 3.4 如何退出 switch_user?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony LTS:如何从 2.8 升级到 3.4?

Symfony LTS:如何从 3.4 升级到 4.4?

如何在 Symfony 3.4 中设置基于域的配置?

如何配置服务类以使用 BazingaGeocoderBundle 和 Symfony 3.4

如何将令牌存储作为参数传递给 Symfony 3.4 中的事件监听器

Symfony 更新 2.8 到 3.4