JWT Получение аутентифицированного пользователя с токена в Laravel - PullRequest
1 голос
/ 11 февраля 2020

Когда я передаю токен пользователя jwt в заголовок запроса, я получаю только информацию о пользователе, которая находится в этой таблице

У меня есть реляционная база данных, в которой данные каждого пользователя хранятся в другой таблице. JWT возвращает только данные о пользователях из таблицы пользователей (имя, адрес электронной почты и т. Д. c. Только это).

При получении списка всех пользователей я могу сохранить их данные в другой таблице, но не могу знаете, как это сделать с помощью jwt.

Кто-нибудь может подсказать мне это? Я использую Laravel

Это ресурс пользователя

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use App\History;
use App\Http\Resources\History as HistoryResource;

class Admin extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id'  => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            'history' => HistoryResource::collection($this->history)
        ];
    }
}

А это контроллер jwt для выборки пользователя

public function getAuthenticatedUser()
{
    try {

        if (! $user = JWTAuth::parseToken()->authenticate()) {
            return response()->json(['user_not_found'], 404);
        }

    } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {

        return response()->json(['token_expired'], $e->getStatusCode());

    } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {

        return response()->json(['token_invalid'], $e->getStatusCode());

    } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {

        return response()->json(['token_absent'], $e->getStatusCode());

    }

    // the token is valid and we have found the user via the sub claim
    return response()->json(compact('user'));

}

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Ваша проблема в том, что JWTAuth::parseToken()->authenticate() возвращает User, а не пользовательский ресурс (Admin).

Вам просто нужно сгенерировать ресурс из $user для исправления:

$admin = new Admin($user);
return response()->json(['user' => $admin]);
0 голосов
/ 12 февраля 2020

Мне удалось это исправить, просто сделав это.

    $user = auth()->user();
    $admin = Admin::find($user);
    $return = AdminResource::collection($admin);   
    return response()->json($return);

Он вернул зарегистрированного пользователя

...