@lexstile

Как правильно записать в JWT роль пользователя в laravel/passport?

Задача: послать на фронт JWT, у которого будет задана роль в payload.
Сейчас это реализовано костыльно и небезопасно.
Есть ли идеи, как можно это правильно организовать?
AuthController
public function login(LoginRequest $request)
    {
        $client = Client::query()->where('password_client', 1)->first();

        $response = Http::asForm()->post(url('/').'/oauth/token', [
            'grant_type' => 'password',
            'client_id' => $client->id,
            'client_secret' => $client->secret,
            'username' => $request->email,
            'password' => $request->password,
            'scope' => $request->role,
        ]);

        if ($response->status() === 200) {
            return response()->json([
                'access_token' => $response['access_token'],
            ])->withCookie('refresh_token', $response['refresh_token'], 86400);
        }

        return $this->baseJson(success: false, message: ResponseHelper::error(__('auth.failed')), status: 400);
    }

LoginRequest
public function rules()
    {
        return [
            'email' => ['required', 'email', 'exists:users,email', 'max:255'],
            'password' => ['required', 'string', 'min:8', 'max:32'],
            'remember_me' => ['nullable', 'boolean'],
            'role' => ['required'],
        ];
    }

    protected function prepareForValidation()
    {
        $this->merge([
            'role' => User::query()->where('email', $this->email)->get()->value('role') ?: User::USER,
        ]);
    }

Сейчас в $response['refresh_token'] возвращается следующая информация:
{
  "aud": "2",
  "jti": "c8298b6c80a85db3241a80f377586495da1718a5f31a23abb9bed000bf6e96de1ca47d8b3f465b91",
  "iat": 1666809913.839331,
  "nbf": 1666809913.839332,
  "exp": 1666811713.828701,
  "sub": "2",
  "scopes": [
    "owner"
  ]
}


Варианты:
1. Ответ не меняется, но подход должен быть не через request, как сейчас.
2. Добавляется новое поле role, равно роли пользователя (строка).
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы