1

Ich bin dabei, ein SPA (hybrid app) mit ionic und AngularJS (1.5.x) zu machen. Ich benutze Symfony 2.8 für mein Backoffice und um mit meiner API umzugehen.Wie bekomme ich Daten aus dem Autorisierungsheader und verwende sie in meiner API? (Lexik JWT)

Ich wollte JWT verwenden, und ich verwende das Lexik JWT-Paket dafür. Alles funktioniert gut. Wenn sich der Benutzer anmeldet, erhält er ein Token, das dann im Autorisierungsheader gespeichert wird. Nur Benutzer mit diesem Token (oder besser Token in diesem Header) können auf die API zugreifen und API-Aufrufe ausführen.

Die einzige Sache, die mir unklar ist, ist, wie man es so macht, dass der Benutzer nur API-Aufrufe (Holen Sie Benutzerinformationen, nur ihre eigenen Beiträge oder solche aktualisieren), die ihre eigenen Informationen betrifft.

Bis jetzt habe ich versucht, die Daten aus dem Authorization-Header zu bekommen, um weiter irgendwie die Daten dieses Tokens zu verwenden (Benutzername ist dort), um zu überprüfen, ob es gleich dem Namen des Benutzers ist, der diesen Bericht erstellt hat.

Versucht mehrere Dinge wie getallheaders(), $token = $_SERVER['Authorization']; und andere allgemeine Funktionen, die die Anfrage Header überprüfen, aber jedes Mal bekomme ich auch Fehler.

Bin ich etwas missverstanden oder fehlt mir ein Schritt? Benutze ich JWT falsch? Ist meine Argumentation richtig, dass ich es so machen soll oder gibt es eine flüssigere/logischere Vorgehensweise?

ich auch sowie NelmioCORS, NelmioApiDoc und FOSUSERBundle

Antwort

2

Wenn Sie hinter der Firewall durch das Bündel zur Verfügung gestellt und, wenn der Benutzer korrekt angemeldet FOSRestBundle für meinen API verwenden, können Sie das Benutzerobjekt erhalten von Ihrem Controller durch Aufruf der Methoden getToken() dann getUser() des security.token_storage Service. Wenn Ihr Controller Symfony\Bundle\FrameworkBundle\Controller\Controller erweitert, können Sie direkt $this->getUser() anrufen.

<?php 

namespace AcmeBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

/** 
* @Route("/api") 
*/ 
class ApiController extends Controller 
{ 
    /** 
    * @Route("/hello") 
    * @Security("is_granted('ROLE_USER')") 
    */ 
    public function helloAction() 
    { 
     $token = $this->get('security.token_storage')->getToken(); 
     $if (null !== $token) { 
      //$token should be an instance of Lexik\Bundle\JWTAuthenticationBundle\Security\Authentication\Token\JWTUserToken 
      $user = $token->getUser(); 
     } 
     // or 
     $user = $this->getUser(); 
     ... 
    } 
} 
Verwandte Themen