Rails:Ajaxを使用してリクエストを送った際、Unprocessable Entity 422 となってしまう件について
実行環境
- Rails 7.0.2
問題
js(jQuery)のajaxでcreateアクション(users::books#create)にリクエストを飛ばすとUnprocessable Entity 422となってしまう。
Rails側のエラーを見てみると「ActionController::InvalidAuthenticityToken (Can't verify CSRF token authenticity.):」となっていた。
対応策
解決策1 application_controller.rbを修正
protect_from_forgery with: :null_session
↑この変更により、CSRF対策が『例外の発生』から『セッションのクリア』になる。 『セッションのクリア」の場合、処理は継続されるためAPIのエンドポイントを叩いたら結果が返ってくるようになる。
解決策2 特定のcontrollerを修正
skip_before_action :verify_authenticity_token
↑を追加 影響範囲が限定的になる
参考にしたサイト
【Rails】 API開発で『Can't verify CSRF token authenticity』といわれたときの対応 - Qiita