ajaxでのコメント機能実装時のエラー①(Can't verify CSRF token authenticity.)
今回は、ajaxを使ったコメント機能の実装時に遭遇した二大エラーについてまとめてみました。 ajaxの復習記事はまた後日に上げます。
Can't verify CSRF token authenticity.
Started PATCH "/comments/44" for ::1 at 2020-11-07 16:24:44 +0900 Processing by CommentsController#update as */* Parameters: {"comment"=>{"body"=>"OOO"}, "id"=>"44"} Can't verify CSRF token authenticity. Redirected to http://localhost:3000/login Filter chain halted as :require_login rendered or redirected Completed 302 Found in 1ms (ActiveRecord: 0.0ms) Started PATCH "/login" for ::1 at 2020-11-07 16:24:44 +0900 ActionController::RoutingError (No route matches [PATCH] "/login"):
解決方法
protect_from_forgery with: :null_session
これで解決できなかったので下のコードを試すことをしなかった。
結果、2時間以上ハマり続けることに。
Reactのイベントに参加して気持ちを落ち着かせた後に改めてデバッグ。物は試しってことで
protect_from_forgery :except => [:update]
をcommentコントローラに記入すると、何と解決!!!
※このエラーだが、application.jsの記述で
//= require rails-ujs
が//= require jquery
より先に書かれていたのが原因らしい。application.jsは上から順番に読み込まれるため、jqueryありきのrails-ujsをjqueryより先に書くと挙動がおかしくなるとのこと。
protect_from_forgery を使って無理やり解決するのは外部からのアクセスに対して無防備になってしまうためあまり良くないらしい。