Как получить точного пользователя плюс точные сообщения пользователя в laravel с токена jwt laravel - PullRequest
1 голос
/ 12 февраля 2020

Я пытаюсь получить список одного пользователя плюс его / ее пост в другой таблице, передавая в заголовке токен пользователя 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

    $user = auth()->user();
    $userid = User::where('id', $user->id);
    $return = UserResource::collection($userid);   
    return response()->json($return);


}

При этом я получаю

BadMethodCallException: Call to undefined method Illuminate\Database\Eloquent\Builder::mapInto() in file C:\xampp\htdocs\doc\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php on line 50

#0 C:\xampp\htdocs\doc\vendor\laravel\framework\src\Illuminate\Support\Traits\ForwardsCalls.php(36): Illuminate\Database\Eloquent\Builder::throwBadMethodCallException('mapInto')

Но если я сделаю это таким образом;

$user = auth()->user();
$userid = User::find($user);
$return = UserResource::collection($userid);   
return response()->json($return);

Я получу ответ, но я верну двух пользователей вместо точного пользователя с токеном jwt

Когда я возвращаю только auth () -> user () , я получаю точного пользователя jwt, но без ресурса post.

Как получить точного пользователя плюс пользователя точные сообщения

1 Ответ

0 голосов
/ 12 февраля 2020

Я вижу проблему в следующем фрагменте.

User::where('id', $user->id);

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

User::where('id', $user->id)->first();

Во-вторых, для этого конкретного случая создается помощник, который называется find (), вы можете вызывать статически для классов модели.

$user = User::find($user->id);

EDIT

$return = UserResource::collection($userid);

Ожидает коллекцию, поэтому измените ее на один ресурс.

$return = new UserResource($userid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...