Rails - 如何解決ajax沒有CSRF Key的問題

錯誤訊息

當瀏覽器發生422錯誤,很有可能是缺少CSRF Key所引起的。這時候可以到 Log 確認一下是否是缺少 CSRF Key的情形。

方法一:用js抓mete的csrf-token

1
2
3
4
$(document).ajaxSend(function(e, xhr, options) {
var token =$j("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});

想要學習處理csrf可以看看jquery-ujs的source code

jquery-rails/jquery_ujs.js at master · rails/jquery-rails

方法二:在controller加上一個方法

[SOLVD] Rails: How Does csrf_meta_tag Work? | DevSolvd

配合ajax 使用

1
2
3
4
5
6
7
8
9
10
11
12
13
$.ajax({
url: "your_url",
type: "DELETE",
dataType: "json",
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
data: {id: attr.ta_attr_id },
success: function(data) {
console.log(data);
attr.is_added = false;
attr.position = undefined;
}
});

結論

這是在前端做的事情,所以我會選擇使用js來抓

評論