如何在 Symfony 中使用 LexicJWT 在 EventSubscriber 中获取用户
How in Symfony get user in EventSubscriber using LexicJWT
我是 Symfony 新手。我使用 LexicJWT 令牌。
final class ProductCreateSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $hostRepository;
public function __construct(EntityManagerInterface $entityManager, HostRepository $hostRepository)
{
$this->entityManager = $entityManager;
$this->hostRepository = $hostRepository;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['createHost', EventPriorities::PRE_WRITE],
];
}
public function createHost(GetResponseForControllerResultEvent $event)
{
$product = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
- - - - - -- - - I NEED USER HERE - - - - - - -
if (!$product instanceof Product || Request::METHOD_POST !== $method) {
return;
}
$parsedUrl = parse_url($product->getUrl());
if (isset($parsedUrl['host'])) {
$host = $this->hostRepository->findOneByName($parsedUrl['host']);
if (!$host) {
$host = $this->hostRepository->createByName($parsedUrl['host']);
}
$product->setHost($host);
}
}
}
如何在 createHost 方法中获取 User?如何在 EventSubsriber 中获取用户或令牌?找不到这方面的任何信息?我在哪里可以阅读它?
JWT token是通过header传递的,所以需要在事件中访问header。
您可以尝试像这样访问 header:
$request = $event->getRequest();
$headers = $request->headers->all();
从 header 中,您可以获取内部具有 JWT 令牌的身份验证 header,并将其解码以获得用户。
更新:
正如@Jared Farrish 提到的,确保令牌有效!
我是 Symfony 新手。我使用 LexicJWT 令牌。
final class ProductCreateSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $hostRepository;
public function __construct(EntityManagerInterface $entityManager, HostRepository $hostRepository)
{
$this->entityManager = $entityManager;
$this->hostRepository = $hostRepository;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['createHost', EventPriorities::PRE_WRITE],
];
}
public function createHost(GetResponseForControllerResultEvent $event)
{
$product = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
- - - - - -- - - I NEED USER HERE - - - - - - -
if (!$product instanceof Product || Request::METHOD_POST !== $method) {
return;
}
$parsedUrl = parse_url($product->getUrl());
if (isset($parsedUrl['host'])) {
$host = $this->hostRepository->findOneByName($parsedUrl['host']);
if (!$host) {
$host = $this->hostRepository->createByName($parsedUrl['host']);
}
$product->setHost($host);
}
}
}
如何在 createHost 方法中获取 User?如何在 EventSubsriber 中获取用户或令牌?找不到这方面的任何信息?我在哪里可以阅读它?
JWT token是通过header传递的,所以需要在事件中访问header。
您可以尝试像这样访问 header:
$request = $event->getRequest();
$headers = $request->headers->all();
从 header 中,您可以获取内部具有 JWT 令牌的身份验证 header,并将其解码以获得用户。
更新: 正如@Jared Farrish 提到的,确保令牌有效!