使用Passport和Laravel进行身份验证时,返回访问令牌和用户

时间:2017-04-14 13:11:42

标签: laravel api laravel-passport

我正在使用Laravel 5.4和Passport创建API。 API授权使用密码授权类型完成。

以下是示例请求:

$http = new GuzzleHttp\Client;
$response = $http->post('http://your-app.com/oauth/token', [
  'form_params' => [
     'grant_type' => 'password',
     'client_id' => 'client-id',
     'client_secret' => 'client-secret',
     'username' => 'taylor@laravel.com',
     'password' => 'my-password',
     'scope' => '',
   ],
]);

return json_decode((string) $response->getBody(), true);

这将使用以下响应向'/ oauth / token'发送POST请求:

{
  "token_type": "Bearer",
  "expires_in": 3155673600,
  "access_token": "eyJ0eXAiOiJK...",
  "refresh_token": "LbxXGlD2s..."
}

我想要的是获得包括经过身份验证的用户的响应,如下所示:

[
  data:{
     name: Jhon,
     email: jhon@example.com,
     address: ASDF Street no.23
  },
  token{
     "token_type": "Bearer",
     "expires_in": 3155673600,
     "access_token": "eyJ0eXAiOiJK...",
     "refresh_token": "LbxXGlD2s..."
  }
]

我已经做的是改变第65行的PasswordGrant文​​件

vendor/league/oauth2-server/src/Grant/PasswordGrant.php

$responseType->setAccessToken($accessToken);
$responseType->setRefreshToken($refreshToken);
return $responseType;

我希望有人可以帮助我,并告诉我如何解决这个问题, 谢谢。

1 个答案:

答案 0 :(得分:1)

您可以编写一个(after-) middleware来获取原始响应并将其转换为您希望的方式。但请注意,所有其他Passport中间件(CheckClientCredentialsCheckScopesCreateFreshApiToken等......)可能取决于该特定格式,并且还必须进行调整。