0
我无法弄清楚用户的id如何模仿用户而不是Symfony中用户的用户名?如何在symfony中通过id代替用户模拟用户?
下面的技巧与用户名的作品不能与ID工作,因为symfony寻找用户名:
?_switch_user={id}
问候。
PS:对不起,我的英语。
我无法弄清楚用户的id如何模仿用户而不是Symfony中用户的用户名?如何在symfony中通过id代替用户模拟用户?
下面的技巧与用户名的作品不能与ID工作,因为symfony寻找用户名:
?_switch_user={id}
问候。
PS:对不起,我的英语。
这是不可能实现自己的防火墙侦听器,因为它从用户提供者(它的接口中只有一个loadUserByUsername()方法)加载用户的幕后。
但是,您可以实现自己的防火墙侦听器,并通过查看中的代码获取灵感。有关实施您自己的身份验证提供程序的详细信息,请检查cookbook article。
编辑:
一个可能的解决方案可能会注册一个额外的请求收听:
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LookupSwitchUserListener implements EventSubscriberInterface
{
private $repository;
public function __construct(UserRepository $repository)
{
$this->repository = $repository;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['lookup', 12] // before the firewall
];
}
public function lookup(GetResponseEvent $event)
{
$request = $event->getRequest();
if ($request->has('_switch_user') {
return; // do nothing if already a _switch_user param present
}
if (!$id = $request->query->has('_switch_user_by_id')) {
return; // do nothing if no _switch_user_by_id param
}
// lookup $username by $id using the repository here
$request->attributes->set('_switch_user', $username);
}
}
现在注册这个监听器在服务容器:
services:
my_listener:
class: LookupSwitchUserListener
tags:
- { name: kernel.event_subscriber }
调用与?_switch_user_by_id=xxx
一个url参数现在应该正确查找用户名并进行设置,以便SwitchUserListener可以切换到指定的用户。
很多很多谢谢。 –
如果使用FOS用户,有没有其他办法? –
我建议只使用用户名代替。您可以在两个事物之间创建一个“管理员”控制器,通过它的ID查找用户,并显示具有正确'_switch_user'查询参数的链接。 – Gerry