2017-07-11 14 views
6

私はLaravel Passport 3を使って認証するために、Laravel 5.4でAPIを構築しています。私のAPIメソッドのすべて常に返された値のセットを返し、successerrors(エラーがないかどうか)などLaravel Passport/OAuth-Serverレスポンスを変更する

私は\Illuminate\Auth\AuthenticationExceptionの応答が私のアプリの残りの部分と合わせて、スロー変更しましたしかし、ベンダーのファイルを編集するような恐ろしいことをせずに、さまざまなトークン・グラント応答の応答をどのように変更するのか分かりません。

+0

この質問では、いくつかのコンテキストとより良い質問を使用することができますが、似ているのは「しかし、さまざまなトークン認可応答の応答を変更する方法がわかりません」だけです。また、いくつかのコードを提供します。 –

答えて

1

ミドルウェアを使用してレスポンスを変更できると思います。 laravelのドキュメントから

要求はミドルウェア自体に依存して前または後のミドルウェアが実行するかどうかをミドルウェア

後&前。

レスポンスを取得してレスポンスを再フォーマットすることができます。

laravelのsetContentメソッドを使用すると、応答としてコンテンツを設定できます。 Check here

+0

私はあなたがミドルウェアでそれを行うことができるかもしれないと思ったが、始める方法を知らなかった。これはいいです、ありがとう。 –

+0

あなたは恩恵を受けることになっていました。何らかの理由で何とかそれを間違った人に渡しました。それを移動する方法があるかどうかわからない... –

+0

ありがとうございます。恩恵の問題はありません。私たちはコミュニティを支援するためにここにいます。これが私たちが成長する方法です。結果をお知らせください。 –

2

あなたがここで何をしようとしているのかはライブラリではサポートされていません。何があってもハッキーになりますし、laravel/passportの将来のバージョンとの互換性が損なわれる可能性があります。私の意見で

、あなただけのこれらの2つのオプションから選択することができます。

  1. 代わりにパスポートルート(Passport::routes())を宣言するあなたのカスタムメソッドと同等のルートを宣言することができます。これらのメソッドは、パスポートクラスとメソッドを内部的に呼び出し、パスポートを返す前にそれらの値を返します。パスポートコードを掘り下げる必要がありますが、同時にいくつかのフィールド(successまたはerror)を追加するだけで、ライブラリを更新する際に手間をかけずにコードを更新できるはずです。

  2. フォークlaravel/passport必要に応じて変更してください。この解決方法は最初のように乱雑ではなく、将来新しいバージョンのパスポートとマージするのは難しいでしょう。

もちろん両方とも素晴らしい解決策ではありません。標準的なパスポートの回答を保つか、より適切な図書館を使うのが良い選択肢です:あなたが求めているのであれば、実現できないと思います。

+0

それは痛みです。どちらのオプションも私が考えていた、私はちょうど良い方法があったと思った。現在、私は自分自身のルートを持っており、アクセストークンなどを渡す必要があります。私は何かにフックをかけたり、ミドルウェアを追加してレスポンスを調整したりしたいと考えていました。 –

+0

@gbalduzziが正しいです。成功応答があるかどうかをチェックするjs関数を変更します。応答に 'success'変数**または**' expires_in'プロパティが存在するかどうか確認してください。 – piotr

-1

別の方法 - 目的に合わせてプロキシルートを作成します。

Route::post('custom-auth/token', function (Request $request) { 
    $proxy = Request::create('oauth/token', 'POST', $request->request->input()); 

    $response = app()->handle($proxy); 

    return responseCallback($response); 
}); 

ここでresponseCallbackカスタムレスポンス変更機能。

+0

私は偶然あなたに賞金をあげましたが、かなりのオーバーヘッドがあるので、これを行うことはお勧めしません。 –

+0

@DanielDewhurst、ええ。 「ミドルウェア」ソリューションを使用し、「OAuth」ルートリクエスト/レスポンスフォーマットをオーバーライドすると、オリジナルの「OAuth」リクエスト/レスポンスフォーマットが期待されるため、サードパーティのクライアントとの非互換性が発生します。 – tooleks

関連する問題