2016-12-21 80 views
2

我想讓tu使用LexikJWTAuthBundle與FOSRestBundle來證實我的API路由。 當我在我的請求的頭部手動提供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 } 

我該如何解決這個問題?或者,如果你知道另一種自動添加令牌的方式?

回答

0

問題只是我的自定義偵聽器的優先級。

防火牆監聽器是我之前觸發,所以我設置優先級較高的礦:

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