ケース1: csrf_meta_tagsを付け忘れている
application.html.erb
<head>
<%= csrf_meta_tags %>
</head>
- 他の場所からレイアウトをコピペしたときに、上記タグが削除されたまま、ということがあった。
- ここでcsrf-tokenを引き回しているので、忘れずに足しておいてね。
ケース2.ajaxでリクエストを送るときに、csrfトークンがマッチしていない
ajax.js
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
}
});
- jquery-fileupload-railsなどを使っていて、ajaxリクエストを送っているとき
- csrf-tokenの引き回しができていなかったようなので、上記コードが必要でした
-
参考
https://stackoverflow.com/questions/5126721/rails-not-reloading-session-on-ajax-post/5127927#5127927