Laravel 5.6: Возврат объекта пользователя при успешной аутентификации паспорта - PullRequest
0 голосов
/ 21 марта 2020

Я хочу вернуть объект пользователя с токеном доступа всякий раз, когда пользователь успешно входит в систему.

Я использую Laravel 5.6 с Laravel Passpport.

Вот как я удалось это сделать

class ApiLoginController extends AccessTokenController
{
    public function issueToken(ServerRequestInterface $request)
    {
        return $this->withErrorHandling(function () use ($request) {
            $response =  $this->convertResponse(
                $this->server->respondToAccessTokenRequest($request, new Psr7Response)
            );
            $requestData = $request->getParsedBody();
            $content = \json_decode($response->getContent());
            // At this point user is already authenticated
            $content->user =  User::whereEmail($requestData['username'])->get();
            $response->setContent(\json_encode($content));
            return $response;
        });
    }
}

это возвращает что-то вроде этого:

{
    "token_type": "Bearer",
    "expires_in": 12345678,
    "access_token": "...",
    "refresh_token": "...",
    "user": {...}
}

По сути, это просто токен доступа с прикрепленным к нему объектом пользователя.

Большинство кода копируется из функции issueToken(), которую я переопределяю. Однако для достижения необходимого результата мне нужно декодировать ответ, получить объект пользователя и снова его кодировать. Хотя конечный результат - это то, чего я хочу достичь, он не идеален, и мне было интересно, есть ли лучший способ сделать это.

...