2015-03-12 23 views
12

Ho un backend laravel 5 che invia un jwt-token come risposta json all'accesso con jwt-auth.Aggiungere il ruolo utente al jwt, laravel 5 jwt-auth

Ora vorrei aggiungere il ruolo utente al token JWT che laravel manda, ho provato la seguente modo:

Questo è il mio attuale regolatore

<?php 
namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use JWTAuth; 
use Tymon\JWTAuth\Exceptions\JWTException; 
use Illuminate\Database\Eloquent\Model; 
use App\User; 

class AuthenticateController extends Controller 
{ 
    public function authenticate(Request $request) 
    { 
     // grab credentials from the request 
     $credentials = $request->only('email', 'password'); 
     $user = User::where('email', '=', $credentials['email'])->first(); 
     $customClaims = ['role' => $user->role]; 

     try { 
      // attempt to verify the credentials and create a token for the user 
      if (! $token = JWTAuth::attempt($credentials, $customClaims)) { 
       return response()->json(['error' => 'invalid_credentials'], 401); 
      } 
     } catch (JWTException $e) { 
      // something went wrong whilst attempting to encode the token 
      return response()->json(['error' => 'could_not_create_token'], 500); 
     } 
     // all good so return the token 
     return response()->json(compact('token')); 
    } 
} 
?> 

C'è un modo più pulito per fare questo ?

+0

JWT per php è documentato male. Fare un semplice sistema di login/logout è doloroso! Vedi le mie domande a riguardo. – Maykonn

+0

Stavo cercando la stessa cosa, hai trovato qualche soluzione? – kitensei

+0

Sono andato con la soluzione di cui sopra, anche se è un'altra query. Impossibile trovare una soluzione più pulita – RVandersteen

risposta

2

Attualmente stai interrogando l'utente due volte, una volta utilizzando l'e-mail allo scopo di ottenere il ruolo e il secondo all'interno del metodo jwt::attempt(). Suggerirei di ridurre le query a una sola, ma eseguendo l'autenticazione {Auth :: tentativo ($ credientials)} e quindi passando l'utente recuperato nel metodo JWT::fromUser(), insieme al reclamo personalizzato. so

JWT::fromUser($user,['role' => $user->role]) 
1

È strano, specificando alcuni $ customClaims come secondo parametro per il metodo ditentativo() in realtà funziona per me.

Tuttavia, hai provato a utilizzare la facciata JWTFactory? Ti consente di creare ogni tipo di token che desideri.

È possibile ottenere maggiori informazioni qui: JWT-Auth Creating Tokens Page.

Come installation guide suggests, non dimenticare di aggiungerlo come facciata durante l'installazione di JWT-Auth!

Spero che aiuti!

0

Sembra che non ci sia un modo più pulito nella versione stabile corrente di JWTAuth [0.5.9].

Date un'occhiata sulle seguenti questioni #89#108

Per quanto l'autore ha sottolineato nei suoi commenti ci saranno miglioramenti nella sua prossima versione che coprono questo problema. Puoi dare un'occhiata al suo ramo di sviluppo.

+0

aiutalo condividendo del codice exampl – Mostafiz

Problemi correlati