1

这确实是标题所说的 - 我无法弄清楚为什么用户切换不起作用。在我的 security.yml 我有:

firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern: ^/
        form_login:
            provider:                       fos_userbundle                  # using FOSUserBundle for user authentication
            check_path:                     fos_user_security_check
            login_path:                     fos_user_security_login
            csrf_token_generator:           security.csrf.token_manager     # CSRF token - can be changed?
            default_target_path:            default_logged_in_target        # default route to go to after login
#                default_target_path:            fos_user_profile_show
            always_use_default_target_path: true                            # ignore the requested url and allways go to default route after login
        logout:
              path:                         fos_user_security_logout
              target:                       default_loged_out_target

        logout:       true
        anonymous:    true
        switch_user:  true

调用网址

[ProjectPath]/account?_switch_user=testuser

导致错误

Switch User failed: "Username "testuser" does not exist."

但是,“testuser”是一个完全有效的用户,我可以在以标准方式登录时使用该用户正常登录。我在使用“_switch_user”调用 URL 时登录的用户确实具有“ROLE_ALLOWED_TO_SWITCH”角色 - 但这似乎不是问题。我被困在这里。任何提示都非常感谢。

编辑:

堆栈跟踪显示在“SwitchUserListener.php”中调用

$this->tokenStorage->setToken($this->attemptSwitchUser($request));

失败并被捕获,导致给定的错误。

4

2 回答 2

4

我可以将 fos_userbundle 用户提供程序添加到 security.yml 中,如下所示:

firewalls:
..
    main:
        ...
        switch_user:
            provider:   fos_userbundle
于 2016-07-13T11:08:06.030 回答
0

好吧,我犯了一个愚蠢的错误,但也许其他人也犯了。我使用电子邮件进行身份验证,但使用用户名切换用户。确保使用相同的属性。所以就我而言,我需要使用电子邮件:?_switch_user=example@email.com

于 2021-07-26T09:11:53.527 回答