web-dev-qa-db-ja.com

カスタムミドルウェアをLaravel Passportエンドポイントに追加します

私は標準のLaravel 5.4でのパスポート設定を持っています-それはすべて正常に動作し、トークンを生成しています。

Auth:apiミドルウェアと、リクエストが処理される前にリクエスト内の特定のヘッダーが存在し、有効であることを確認するカスタムミドルウェアを使用してAPIルートを保護します。このミドルウェアは、APIルートグループで正常に機能します。

laravel '.../oauth/token'によって生成されたPassportルートをこのミドルウェアでもラップする方法はありますか?

現在、AuthServiceProvider.php boot()メソッドでルートを設定しています。

public function boot()
{
    $this->registerPolicies();

    // Passport/OAuth
    Passport::routes(function ($router) {
      $router->forAccessTokens();
      $router->forTransientTokens();
    });

    Passport::tokensExpireIn(Carbon::now()->addDays(7));

    Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}

最終的な目標は、ヘッダーが存在しない場合、oauthエンドポイントがエラーを返すことです。

9
fatuous.logic

_/oauth/token_などの1つのPassportルートにミドルウェアを追加するだけでよい場合は、次の方法で追加できます。

  1. _php artisan r:l_と入力して、必要なルートを検索します
  2. このルートに使用されているコントローラーとメソッドを確認します。例では、_AccessTokenController@issueToken_になります。
  3. AccessTokenControllerを拡張するコントローラーを作成します。空のままにしておくことができます
_namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Laravel\Passport\Http\Controllers\AccessTokenController;

class ApiTokenController extends AccessTokenController
{

}
_
  1. 次に、そのコントローラーとメソッドへのルートを作成します(このコントローラーはすべての親コントローラーメソッドを継承するため)。

Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');

3
Varin

これを試すことができます:_app/Providers/AuthServiceProvider_に移動し、function boot()を探します。この機能では、パスポートのルートを登録するための行が表示されます。デフォルトのコードはPassport::routes()です。このroutes()メソッドは、2番目の引数としてoptions配列を受け入れます。これを使用して、Passportルートのミドルウェアを設定できます。

_Passport::routes(null, ['middleware' => 'api']);
_
9
rdehnhardt

_app/Providers/AuthServiceProvider_の上部に次の使用ステートメントを追加して、ルートファサードを含めます。

_use Illuminate\Support\Facades\Route;
_

次に、boot()メソッドで、次のようにPassport :: routers()をRoute :: group()内に配置します。

_Route::group(['middleware'=>'MyFunkyCustomMiddleware'], function(){
    Passport::routes(); // <-- Replace this with your own version
});
_

お役に立てば幸いです。

3
Martin Joiner