2016-12-21 2 views
2

Ich versuche LexikJWTAuthBundle mit FOSRestBundle zu verwenden, um meine API-Routen zu schützen. Es funktioniert gut, wenn ich manuell das JWT in der Kopfzeile meiner Anfragen gebe, aber für meine App möchte ich es automatisch in jeder API Anfragen Header über die 'Kernel.request' SF-Ereignis hinzufügen.Ereignis 'kernel.request' wird nicht korrekt versendet

Das Problem ist, dass mein Event-Abonnent nicht korrekt versandt wird, nehme ich an, dass LexikJWTAuthBundle vorher feststellen, dass ich keine JWT in meiner Anfrage habe und 401 Antworten zurücksende.

Die Veranstaltung Teilnehmer:

<?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"); 
    } 
} 

Die Veranstaltung Teilnehmer Definition:

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 } 

Wie kann ich dieses Problem lösen? Oder vielleicht, wenn Sie eine andere Möglichkeit kennen, das Token automatisch hinzuzufügen?

Antwort

0

Das Problem war nur die Priorität meines benutzerdefinierten Zuhörers.

wurde die Firewall Zuhörer vor meinen ausgelöst, so dass ich eine höhere Priorität für die Minen:

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