LaravelのAPIがCORSエラーを返す意外な原因

はじめに

LaravelでAPIを立ててて、フロント(Next.js)からAjaxでPOSTなどの通信時にCORSエラーが返ってきた。

こんな時に発生

  • 一通りCORS対策の設定が完璧にできている。
  • 正常に通信できていたのに、急にCORSエラーが返ってきた。

原因と解決

意外な原因

Laravel側でエラーが発生するとCORSエラーを返すようです。

今回は、デバッグ目的でログファイルに出力した時に発生。原因は、Laravelのログファイルの権限不足でした。storage/logs/laravel.log の書き込み権限が実行ユーザーに付与されておらず、書き込みエラーが発生していました。

解決方法

Laravel側で発生しているエラーを解決する。

今回の場合だと、以下のようにログファイルの権限を変更。

$ chmod 777 storage/logs/laravel.log

または、ログファイルの所有者を実行者(nginxならwww-dataなど)に変更。

まとめ

どういう条件かわかりませんが、API側で500エラーなどが発生した場合にCORSエラーになる事があるようです。

今回はエラーログ自体が吐かれていなかったので問題特定できず、クロスオリジン設定周りを見直すなどしばらく迷走してしまいました。。。