1. ホーム
  2. cors

Laravel 5.3 PassportでAccess-Control-Allow-Originヘッダーレスポンスを追加する。

2023-08-09 11:34:43

質問

私はLaravelの初心者で、OAuth2.0パスワードグラントでLaravel 5.3 Passportプロジェクトをいくつか行っています。私はパラメータを使用してAPIをカールすると、それはトークンで応答します。しかし、ブラウザでは、私のリクエストはlocalhostから来ている一方で、APIは私のVMに位置しているため、エンドポイントが追加する必要がある追加のセキュリティが必要です。以下はそのエラーです。

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 400.

問題が何であるかは分かっていますが、これはサードパーティのアプリなので、そのヘッダーを含めるためにどこに置けばいいのか分かりません。

事前に専門家に感謝します。助けてください。

どのように解決するのですか?

簡単な答えは Access-Control-Allow-Origin ヘッダを localhost または * . 私がいつもやっている方法はこうです。

というシンプルなミドルウェアを作成します。 Cors :

php artisan make:middleware Cors

に以下のコードを追加します。 app/Http/Middleware/Cors.php :

public function handle($request, Closure $next)
{
    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}

を置き換えることができます。 *localhost に変更するか、そのままにします。

次はミドルウェアの読み込みです。次の行を $routeMiddleware の配列に追加します。 app/Http/Kernel.php .

'cors' => \App\Http\Middleware\Cors::class, 

そして最後のステップは、アクセスオリジンヘッダを設定したいルートでミドルウェアを使用することです。laravel 5.3の新しいapiルートについて話していると仮定すると、それを行う場所は以下の通りです。 app/Providers/RouteServiceProvider.php の中、つまり mapApiRoutes() 関数の中にあります(関数の前のコードを削除するかコメントしてもかまいません)。

    Route::group([
        'middleware' => ['api', 'cors'],
        'namespace' => $this->namespace,
        'prefix' => 'api',
    ], function ($router) {
         //Add you routes here, for example:
         Route::apiResource('/posts','PostController');
    });