J'essaie d'utiliser LexikJWTAuthBundle avec FOSRestBundle pour sécuriser mes routes API. Cela fonctionne bien quand je donne manuellement le JWT dans l'en-tête de mes demandes, mais pour mon application je voudrais l'ajouter automatiquement dans l'en-tête de chaque demande d'API via l'événement SF 'kernel.request'. Le problème est que mon abonné d'événement ne semble pas être distribué correctement, je suppose que LexikJWTAuthBundle détecte avant que je n'ai aucun JWT dans ma demande et me renvoie 401 réponses.L'événement 'kernel.request' ne se distribue pas correctement
L'abonné de l'événement:
<?php
namespace MyApp\APIBundle\EventListener;
use MyApp\APIBundle\Controller\TokenAPIController;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class RequestAPIListener implements EventSubscriberInterface
{
/**
* @var string Token API
*/
private $apiToken;
public function __construct(string $apiToken = null)
{
$this->apiToken = $apiToken;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
// dump('hi'); <---- This is execute when uncomment
// die;
return [
KernelEvents::REQUEST => [
'onRequest'
]
];
}
public function onRequest(GetResponseEvent $event)
{
dump($event, $this->apiToken); <---- This is not execute
die;
$request->headers->set('Authorization', "Bearer $token");
}
}
L'abonné événement Définition:
services:
myapp.api_bundle.event_listener.request_api:
class: MyApp\APIBundle\EventListener\RequestAPIListener
arguments: ['@=service("service_container").get("session").get("api_token")']
tags:
- { name: kernel.event_subscriber }
Comment puis-je résoudre ce problème? Ou peut-être si vous connaissez une autre façon d'ajouter automatiquement le jeton?