CORS を許可する

APIなどのアプリケーションリソースに外部からのアクセスを受け入れるために CORS ヘッダーを設定する必要があるかもしれません。

Laravel で従来 CORS のヘッダーを設定するには barryvdh/laravel-cors のパッケージが提供するミドルウェアを利用するのがデファクトスタンダードでしたが、このパッケージは2019年末にリリースされた1.0よりfruitcake/laravel-corsへと引っ越し、名前空間が変化しました。

また、2020年3月にリリースされた Laravel 7.0 よりこのパッケージは初期テンプレートにバンドルされ、初期状態で利用可能になりました。Laravel 6.xやそれ以前からの環境にて利用する場合や、それらからアップデートした環境にて利用する場合は従来通りパッケージのインストールが必要です。

パッケージのインストール

インストール手順はReadmeにあるとおり

上記のとおり、Laravel 7.x で作成したプロジェクトであれば初期状態では既にインストールが完了しているはずです。

まずcomposerでパッケージの追加。

ミドルウェアをapp/Http/Kernel.phpに追加する(ex: laravel/laravel)。ルート毎に追加してしまうと404などエラー時に CORS ヘッダーが出力されなくなるのでここに指定すること。 API 以外に CORS を設定したくない場合、後の設定ファイルにてパスを制限できるのでこれを使用するとよい。(Laravel 7.0の設定ファイルではデフォルトでapi/*に制限されている)

必要に応じて設定ファイル(config/cors.php)を publish する。なお、デフォルトでは全てのルートについてリクエストに応じたヘッダーが付与されるようになっている。 すべてのルートにおいて なにもしない 設定になっているので必須。

設定項目

pathsfruitcake/laravel-cors 固有の設定、allowed_originsはワイルドカードが利用できるよう手が加えられている。それ以外はasm89/stack-corsの設定。ただし、キャメルケースへと変更されている。

とりあえずpathdだけ指定しておけば最低限十分。

1.0.0以前(0.x)からのマイグレーション

いくつかの破壊的変更があるので修正が必要。

  • 名前空間の変更
    • \Barryvdh\Cors\Fruitcake\Corsに修正する必要がある (app/Http/Kernel.php)
  • グループミドルウェアがサポートされなくなった
    • もし使用している場合、Http/Kernel に移動した上で必要に応じてpathsの使用を検討すること
  • config/cors.phpがsnakeCaseからcamel_caseへと変更されている。全てなおすこと。

コメントを残す