2
APIルートをセキュリティで保護するために、FexRestBundleでLexikJWTAuthBundleを使用しようとしています。 私はリクエストのヘッダーに手動でJWTを渡すとうまく動作しますが、私のアプリケーションでは、 'kernel.request' SFイベントを介して各APIリクエストのヘッダーに自動的に追加したいと考えています。イベント 'kernel.request'が正しくディスパッチされない
問題は、私のイベントサブスクライバが正しくディスパッチされないようですが、私はLexikJWTAuthBundleが自分の要求にJWTを持っていないことを検出して、401応答を返すと思います。
イベントサブスクライバ:
<?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");
}
}
イベントサブスクライバの定義:
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 }
がどのように私はこの問題を解決することができますか?または、トークンを自動的に追加する別の方法が分かっている場合は、