2015-03-12 3 views
12

У меня есть брандмауэр laravel 5, который отправляет jwt-токен как ответ json при входе в систему с jwt-auth.Добавить роль пользователя в jwt, laravel 5 jwt-auth

Теперь я хотел бы добавить роль пользователя в JWT маркер, который Laravel посылает, я попытался следующим образом:

Это мой текущий контроллер

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

Есть ли уборщик способ сделать это ?

+0

JWT для php плохо документирован. Сделать простую систему входа/выхода является болезненным! См. Мои вопросы об этом. – Maykonn

+0

Я искал то же самое, нашли ли вы решение? – kitensei

+0

Я пошел с решением выше, даже если это еще один запрос. Не могли найти более чистого решения – RVandersteen

ответ

2

Вы в настоящее время запрашиваете пользователя дважды, используя адрес электронной почты с целью получения роли, а второй - в методе jwt::attempt(). Я бы предложил сократить запросы до одного, но выполнить аутентификацию {Auth :: попытка ($ credientials)}, а затем передают получаемого пользователя в метод JWT::fromUser() вместе с пользовательским требованием. поэтому

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

Это странно, указав некоторые $ customClaims в качестве второго параметра для попытки() метода действительно работает для меня.

Однако, вы пытались использовать JWTFactory Фасад? Он позволяет вам создавать все виды токенов, которые вы хотите.

Дополнительную информацию можно получить здесь: JWT-Auth Creating Tokens Page.

В качестве installation guide suggests, не забудьте добавить его в качестве фасада при установке JWT-Auth!

Надеюсь, это поможет!

0

Кажется, что нет чистейшего способа в текущей стабильной версии JWTAuth [0.5.9].

Посмотрите на следующие вопросы #89#108

Как автор отметил в своем комментарии будет улучшение в своем следующем выпуске, покрывающее этот вопрос. Вы можете взглянуть на свою ветку развития.

+0

помогите ему поделиться некоторыми примерами кода – Mostafiz

Смежные вопросы