私は標準の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エンドポイントがエラーを返すことです。
_/oauth/token
_などの1つのPassportルートにミドルウェアを追加するだけでよい場合は、次の方法で追加できます。
php artisan r:l
_と入力して、必要なルートを検索しますAccessTokenController@issueToken
_になります。_namespace App\Http\Controllers; use Illuminate\Http\Request; use Laravel\Passport\Http\Controllers\AccessTokenController; class ApiTokenController extends AccessTokenController { }
_
Route::middleware('MyMiddleware')->post('/api-token', 'ApiTokenController@issueToken');
これを試すことができます:_app/Providers/AuthServiceProvider
_に移動し、function boot()
を探します。この機能では、パスポートのルートを登録するための行が表示されます。デフォルトのコードはPassport::routes()
です。このroutes()
メソッドは、2番目の引数としてoptions配列を受け入れます。これを使用して、Passportルートのミドルウェアを設定できます。
_Passport::routes(null, ['middleware' => 'api']);
_
_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
});
_
お役に立てば幸いです。