Laravel 環境別にCORS設定を行う方法

PHP

こんにちは ひこにきです

Laravel11でのCORSの設定方法と各環境別に設定を切り分ける方法について説明します

設定ファイル config/cors.php の作成方法

Laravel11 では config配下に cors.php は配置されておらず、publish する必要があります。 artisan コマンドを使って corsの設定ファイルを生成しましょう

cors.php を publish する artisan コマンド

cors.php の初期設定

Laravel の初期設定では api のroutingは api/* とパスが指定されており、 cors の paths 設定についても「api/*」 が設定されています。

allowed_methods、allowed_origins、allowed_headers は * で全て許可となってます。

環境設定ファイル(.env)でCORS設定する方法

cors.php の修正

allowed_methods、allowed_origins、allowed_headers を環境設定ファイルの値を設定するように修正します。

元々配列での設定する項目のため .env ファイルに csv形式で複数設定可能とし explode関数で 設定値を配列化してます。

未設定時のデフォルト値は * になります

環境設定ファイル(.env)への項目追加(設定)

※(設定値はあくまでサンプルとなりますので参考にしてください)

上記の項目を 各環境の .env{.app_env} に追加して環境毎の設定をしてください

以上、Laravelでの環境別CORS設定の方法について説明しました。

おまけ CORSエラー対応

上記まででCORS設定については完了ですが、フロントエンジニアより特定のAPIだけ、CORSのエラーが発生するとのことで調べてみました。

特定のAPIだけ??解せないと思いつつエラーメッセージを確認すると以下のようでした

Access to fetch at ‘https://hoge.com’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: Redirect is not allowed for a preflight request.

結論から言うとCORS設定は正しかったのですが、フロントから呼び出すAPIのエンドポイントの末尾に「/」が余計についていたため、リダイレクトが発生して上記のエラーが発生していました

コメント

タイトルとURLをコピーしました