2017-03-31 19 views
4

私は現時点でAPIに取り組んでおり、レンガの壁に当たっています。私はパスポートを「パスワード」認可タイプで使用しています。トークンレスポンスをカスタマイズするLaravel Passport

アクセストークンを使用してユーザー情報を返信したいと思いますが、方法がわかりません。

これを実現するには、どのクラスを実装、編集、または拡張できますか。

私はこれが返されることを希望:事前に

{ 
    "token_type": "Bearer", 
    "expires_in": 31536000, 
    "access_token": "lalalalalal", 
    "refresh_token": "lalalallala", 
    "user": { 
     "username": "a username", 
     "user_type": "admin" 
    } 
} 

感謝を。

+0

[Custom Laravel Passport BearerTokenResponse](https://stackoverflow.com/questions/39743020/custom-laravel-passport-bearertokenresponse)の可能な複製 – simonhamp

答えて

-3

簡単に行うことができます。 \ ベンダーにあるファイルBearerTokenResponse.php を開きリーグの\のOAuth2-サーバー\ SRC \ ResponseTypesこのような

方法generateHttpResponse(ResponseInterfaceの$応答)を変更し

public function generateHttpResponse(ResponseInterface $response) 
    { 
     $expireDateTime = $this->accessToken->getExpiryDateTime()->getTimestamp(); 

     $jwtAccessToken = $this->accessToken->convertToJWT($this->privateKey); 

     $responseParams = [ 
      'token_type' => 'Bearer', 
      'expires_in' => $expireDateTime - (new \DateTime())->getTimestamp(), 
      'access_token' => (string) $jwtAccessToken, 
      'user' => User::find($this->accessToken->getUserIdentifier()), 
     ]; 

     if ($this->refreshToken instanceof RefreshTokenEntityInterface) { 
      $refreshToken = $this->encrypt(
       json_encode(
        [ 
         'client_id'  => $this->accessToken->getClient()->getIdentifier(), 
         'refresh_token_id' => $this->refreshToken->getIdentifier(), 
         'access_token_id' => $this->accessToken->getIdentifier(), 
         'scopes'   => $this->accessToken->getScopes(), 
         'user_id'   => $this->accessToken->getUserIdentifier(), 
         'expire_time'  => $this->refreshToken->getExpiryDateTime()->getTimestamp(), 
        ] 
       ) 
      ); 

      $responseParams['refresh_token'] = $refreshToken; 
     } 

     $responseParams = array_merge($this->getExtraParams($this->accessToken), $responseParams); 

     $response = $response 
      ->withStatus(200) 
      ->withHeader('pragma', 'no-cache') 
      ->withHeader('cache-control', 'no-store') 
      ->withHeader('content-type', 'application/json; charset=UTF-8'); 

     $response->getBody()->write(json_encode($responseParams)); 

     return $response; 
    } 

ドンApp \ Userモデルを使用することを忘れないでください。

私はこれがあなたに役立つことを願っています。

+2

本当にベンダーファイルを編集しないでください。別のファイルの関数をオーバーライドすることでこれを行う方法はありますか? – Mike

+0

ベンダーのファイルを決して編集しないでください。これは世界を傷つけるでしょう。 Laravelのより良いオプションは、編集したいサービスに似た新しいクラスを作成し、サービスコンテナに登録することです。そうすれば、既存のクラスをオーバーライドしたり、新しいクラスを横に並べたりすることができます。 – simonhamp

+0

ベンダーの編集では決して反応しません... * palm face * – AndrewMcLagan

関連する問題