Я хочу вернуть объект пользователя с токеном доступа всякий раз, когда пользователь успешно входит в систему.
Я использую 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()
, которую я переопределяю. Однако для достижения необходимого результата мне нужно декодировать ответ, получить объект пользователя и снова его кодировать. Хотя конечный результат - это то, чего я хочу достичь, он не идеален, и мне было интересно, есть ли лучший способ сделать это.