2016-09-21 3 views
3

Ich versuche, die JSON-Ausgabe der Authentifizierungsmethode von JWT in Laravel zu ändern, damit es Rollen als ein Array anzeigt.JWT Laravel - Ändern des Inhalts der JSON-Ausgabe

i Also hier

created_at : "2016.08.18 12.33.14" E-Mail : "[email protected]" id : last_logged_in : "2016.09.21 16.37.35" Name : "Dhenn" Rollen : „{0: a dmin, 1: Benutzer "} updated_at : "2016.09.21 16.37.35"

Aber ich kann es nicht. Ich habe versucht, meine jwt.auth PHP-Datei zu ändern, aber es gab mir einen Fehler, dass ich ein Nicht-Eigenschaft-Objekt festlegen.

Hier aktuelle Setup des jwt-Auth.php

public function authenticate($token = false) 
{ 
    $id = $this->getPayload($token)->get('sub'); 

    if (! $this->auth->byId($id)) { 
     return false; 
    } 

    $user = $this->auth->user(); 
    return $user; 
} 

Während ich habe Fehler versuchen, dieses:

public function authenticate($token = false) 
{ 
    $id = $this->getPayload($token)->get('sub'); 

    if (! $this->auth->byId($id)) { 
     return false; 
    } 



    $user = $this->auth->user(); 

    foreach ($user as $roles) { 
      $roles->roles = explode(",", $roles->roles); 
     } 
    return $user; 
} 

Antwort

1

Du hast gesagt, dieses Objekt Ihrer Benutzer:

{ email : "[email protected]" 
    id : 1 
    last_logged_in : "2016-09-21 16:37:35" 
    name : "Dhenn" 
    roles : "{0: admin, 1: user"} 
    updated_at : "2016-09-21 16:37:35" } 

Unter der Annahme, $this->auth->user(); gibt diese, Ihre Iteration foreach ($user as $roles) { ist nicht korrekt, da $user kein Array ein Objekt sein sollte. Auf diese Weise versuchen Sie, durch jede Eigenschaft dieses Objekts zu gehen, aber ich denke, dass Sie das Rollen-Array durchlaufen wollen. Dies sollte so etwas wie:

foreach($user->roles as $role) ... // assuming roles is an array 

Aber roles scheint ein codierter JSON-String zu sein, so dass Sie es auch entschlüsseln müssen.

foreach(json_decode($user->roles) as $role) ... 

Oder direkt: $user->roles = json_decode($user->roles)

0

OK, vielen Dank für Ihre Hilfe. Ich habe die Antwort herausgefunden.

Hier ist mein Code, der schließlich funktioniert hat.

public function authenticate($token = false) 
{ 
    $id = $this->getPayload($token)->get('sub'); 

    if (! $this->auth->byId($id)) { 
     return false; 
    } 
    $user = $this->auth->user(); 
    $user->roles = explode(",", $user->roles); 
    return $user; 
} 
+0

Jetzt sehe ich, was man wollte - die JSON codierte Rollen als Liste von rollen- Objekte. (Siehe meine aktualisierte Antwort oben.) Btw Kudos für das Zurückkommen und zeigen Sie Ihre eigene Lösung! – everyman

Verwandte Themen