这正是标题所说的 - 我无法弄清楚为什么用户切换不起作用。 在我的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时登录的用户确实有#34; ROLE_ALLOWED_TO_SWITCH" - 但这似乎不是问题所在。 我被困在这里。 任何提示都受到高度赞赏。
修改
堆栈跟踪显示在" SwitchUserListener.php"致电
$this->tokenStorage->setToken($this->attemptSwitchUser($request));
失败并被捕获导致给定错误。
答案 0 :(得分:4)
我可以让它将fos_userbundle用户提供程序添加到security.yml,如下所示:
firewalls:
..
main:
...
switch_user:
provider: fos_userbundle
答案 1 :(得分:0)
好吧,我犯了一个愚蠢的错误,但也许其他人也犯了同样的错误。我使用电子邮件进行身份验证,但使用用户名来切换用户。确保您使用相同的属性。所以就我而言,我需要使用电子邮件: ?_switch_user=example@email.com