Подтвердить что ты не робот

Добавить роль пользователя в jwt, laravel 5 jwt-auth

У меня есть брандмауэр laravel 5, который отправляет jwt-токен как ответ json при входе с 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'));
    }
}
?>

Есть ли более чистый способ сделать это?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Вы можете получить дополнительную информацию здесь: JWT-Auth Создание страницы токенов.

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

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

Ответ 3

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

Взгляните на следующие проблемы # 89 # 108

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

Ответ 4

Документация JWT v1.0 вызывает путаницу.
Добавьте этот метод в свою модель пользователя, чтобы вы могли добавлять пользовательские требования при аутентификации пользователей:

public function getJWTCustomClaims()
{

        return = [
            'type' => 'driver',
            'id' => $this->driver->id
        ];
}