【发布时间】:2023-03-27 00:36:01
【问题描述】:
我不想保存我的用户的导航。
我正在尝试将其从'kernel.request' 事件中保存,但我无法获取当前用户...
在我的事件监听器中:
KernelEvents::REQUEST => ['logNavigation0']
还有功能:
public function logNavigation0(GetResponseEvent $event): void
{
dump(
$event->getRequest()->getUser()
);
}
我的用户已连接,但getUser() 回复我null
如何找回我的用户?还有其他方法吗?
谢谢!
我的代码:
class PlayerAction implements EventSubscriberInterface, LogoutHandlerInterface
{
private $mailer;
private $requestStack;
private $entityManager;
private $tokenStorage;
private $sender;
protected $serializer;
public function __construct(\Swift_Mailer $mailer, RequestStack $requestStack, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, $sender)
{
$this->mailer = $mailer;
$this->requestStack = $requestStack;
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
$this->sender = $sender;
$this->serializer = new Serializer([new ObjectNormalizer()], [new JsonEncoder()]);
}
public static function getSubscribedEvents(): array
{
return [
// le nom de l'event et le nom de la fonction qui sera déclenché
Events::PLAYER_REGISTERED => ['logSuccessRegistration'],
Events::PLAYER_UPDATED => ['logSuccessRegistration'],
Events::PLAYER_PLAYING => ['logPlay'],
Events::PLAYER_WINNING => ['logWin'],
AuthenticationEvents::AUTHENTICATION_SUCCESS => ['logSuccessLogin'],
AuthenticationEvents::AUTHENTICATION_FAILURE => ['logFailureLogin'],
KernelEvents::REQUEST => ['logNavigation0'],
KernelEvents::CONTROLLER_ARGUMENTS => ['logNavigation1'],
];
}
[...]
public function logNavigation0(GetResponseEvent $event): void
{
dump(
$event->getRequest()->getUser() //Return null,
);
}
public function logNavigation1(FilterControllerArgumentsEvent $event): void
{
dump(
$event,
$event->getRequest()->getUser(), //Return null,
($event->getArguments()),
$this->tokenStorage->getToken() //Return null,
);
}
}
【问题讨论】:
-
你为什么不注入
TokenStorageInterface? -
尝试通过 Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface 作为依赖注入,然后调用类似这样的东西 $user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null;
-
你在开发环境吗?如果是,工具栏是否显示您已作为特定用户连接?
-
我尝试注入 TokenStorageInterface,结果是一样的……是的,我的调试栏显示了我的用户。