Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用警卫进行身份验证时在Symfony中模拟用户_Symfony_Authentication_Impersonation - Fatal编程技术网

使用警卫进行身份验证时在Symfony中模拟用户

使用警卫进行身份验证时在Symfony中模拟用户,symfony,authentication,impersonation,Symfony,Authentication,Impersonation,对于symfony3,我使用的是一个能够正确运行的自定义guard验证器来直接对用户进行身份验证。我现在想支持用户模拟,但当尝试使用_switch_user query参数模拟用户时,getUser()对象始终是原始用户 我的安全配置是 安全性: 编码器: Symfony\Component\Security\Core\User\User:纯文本 供应商: 应用程序: 实体: 类别:AppBundle:身份验证 属性:用户名 防火墙: 开发人员: 模式:^/((探查器wdt)| css |图像

对于symfony3,我使用的是一个能够正确运行的自定义guard验证器来直接对用户进行身份验证。我现在想支持用户模拟,但当尝试使用_switch_user query参数模拟用户时,getUser()对象始终是原始用户

我的安全配置是

安全性:
编码器:
Symfony\Component\Security\Core\User\User:纯文本
供应商:
应用程序:
实体:
类别:AppBundle:身份验证
属性:用户名
防火墙:
开发人员:
模式:^/((探查器wdt)| css |图像| js)/
安全性:错误
主要内容:
匿名:~
开关用户:true
警卫:
认证者:
-app.authenticator
角色层次结构:
角色\管理员:角色\用户
角色超级管理员:[角色管理员,角色允许切换]
访问控制:
-{path:^/admin/,role:role_admin}
-{路径:^/,角色:角色\用户}

我找到了一种方法,但它不依赖于本机switch\u用户系统,并且依赖于您的应用程序逻辑

原则是基本的,您可以基于用户类上的两个属性实现自己的交换系统:

  • 模拟:存储要模拟的用户用户名的字符串值
  • impersonatedBy:一个字符串值,其中包含进行模拟的用户的用户名(无数据库存储)
注意:您还可以将用户存储在这些属性中(例如,使用条令映射)

因此,当您告诉guard验证器搜索用户(getUser)时,您要求UserProvider返回用户的模拟用户($user->getImpersonate),并将进行模拟的用户添加到其中($impersonatedUser->setImpersonatedBy)