2016-12-21 9 views
2

Я пытаюсь использовать LexikJWTAuthBundle с FOSRestBundle для обеспечения безопасности маршрутов API. Он хорошо работает, когда я вручную передаю JWT в заголовке моих запросов, но для моего приложения я хотел бы добавить его автоматически в каждый заголовок запросов API через событие kernel.request SF.Событие '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 } 

Как я могу решить эту проблему? Или, может быть, если вы знаете другой способ автоматически добавить токен?

ответ

0

Проблема была только приоритетом моего пользовательского прослушивателя.

Брандмауэр слушателем был вызван, прежде чем у меня, поэтому я приоритетом выше шахты:

public static function getSubscribedEvents() 
    { 
     return [ 
      KernelEvents::REQUEST => [ 
       ['onRequest', 10] 
      ] 
     ]; 
    }