symfony如何监听_switch_用户?

symfony如何监听_switch_用户?,symfony,Symfony,我有一个应用程序,其中我有一个超级管理员角色和具有不同权限的各种用户角色。我希望能够使用\u switch\u user查询模拟这些用户中的任何一个,如所示 但是,当我将查询添加到url的末尾时,它似乎什么都没有做。我已经玩了很长时间了,似乎找不到解决办法。我知道我登录的用户有角色\u允许\u切换,但我似乎不太明白symfony是如何做到的 我正在使用一个自定义身份验证提供程序,所以我认为这与此有关,但我不确定我需要看什么。我可以发布任何需要的代码,但我真的不确定现在发布什么 所以我又翻了一些,

我有一个应用程序,其中我有一个超级管理员角色和具有不同权限的各种用户角色。我希望能够使用
\u switch\u user
查询模拟这些用户中的任何一个,如所示

但是,当我将查询添加到url的末尾时,它似乎什么都没有做。我已经玩了很长时间了,似乎找不到解决办法。我知道我登录的用户有
角色\u允许\u切换
,但我似乎不太明白symfony是如何做到的


我正在使用一个自定义身份验证提供程序,所以我认为这与此有关,但我不确定我需要看什么。我可以发布任何需要的代码,但我真的不确定现在发布什么

所以我又翻了一些,发现我的自定义身份验证提供程序的
侦听器
类编写得不正确。它的编写方式是在每次页面加载时创建一个新的
标记

因此,需要做两件事

第一个是将身份验证侦听器更改为与中的类似,其一般结构如下所示

if (null !== $token = $this->securityContext->getToken()) {
    if ($token instanceof UsernamePasswordToken && $token->isAuthenticated() &&
        $token->getUsername() === $username) {
            return;
    }
}
如果某些条件成立,这些侦听器基本上允许在不创建新令牌的情况下继续进行身份验证。这些条件是,令牌是正确令牌的实例,经过身份验证,并且用户名与登录用户的用户名匹配

其次,如果原始用户试图切换用户,则必须修改此代码以检查基于原始用户的身份验证。详细说明了其他人遇到的类似问题。修复方法是在角色之间循环查找
SwitchUserRole
,并使用该数据进行身份验证。我复制了下面的补丁,它将在上面的初始
if
语句之后

foreach ($token->getRoles() as $role) {
    if ($role instanceof SwitchUserRole) {
        $token = $role->getSource();
            break;
    }
}
总之,身份验证侦听器只会在未通过某些条件的情况下创建新令牌,并且模拟另一个令牌的用户的凭据将用于测试身份验证,而不是他们试图模拟的用户的凭据