プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

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 を使って無理やり解決するのは外部からのアクセスに対して無防備になってしまうためあまり良くないらしい。