由於以下幾個原因,我需要通過Ajax向控制器發送一個post請求,而且我無法做到涉及表單,它必須是在資產> javascript或標記之間的文件中寫入的JS Ajax請求。Rails如何在沒有涉及表單的情況下在Ajax請求中發送真實性令牌?
我寫了一個函數,似乎正確地傳遞數據。但是,它沒有傳遞有效的真實性令牌,因此不允許請求通過。
有沒有辦法符合CSRF保護生成一個令牌,所以控制器滿意嗎?
到目前爲止,我的Ajax功能:
var functionOne = function() {
var $form = $('#' + tinyMCE.activeEditor.formElement.id);
var action = $form.attr('action')
$.ajax({
method: "POST",
url: action,
data: $form.serialize(),
dataType: 'script',
});
};
這種形式傳遞以下PARAMS
{"utf8"=>"✓", "_method"=>"patch", "open_ender"=>
{"answer_id"=>"4",
"content"=>"<p>testing text</p>"},
"id"=>"5"}
我試過,包括Ajax對象內以下行
authenticity_token: $('meta[name=csrf-token]').attr('content'),
,這在應用程序佈局頭部沒有成功
$(function(){
$.ajaxSetup({
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') }
});
});
UPDATE Appart酒店從Aniket的解決方案
。在窗體選項哈希添加
authenticity_token: true
解決問題以及
嗨Aniket,感謝它的工作原理。儘管我使用簡單的表單,但我添加了上面的代碼,Rails停止了投訴。但是,現在它指責** ActionController :: UnknownFormat **。這很奇怪,因爲表單設置爲remote:true,我的控制器正在用JS進行響應,如果我使用submit按鈕提交表單,它就可以工作。任何線索將是什麼問題。 – Andrew
順便說一下,通過在表單的選項散列中添加authenticity_token:true,可以解決問題CSRF問題。這可能與tinyMCE的工作方式有關,它會干擾Rails創建真實標記的默認設置。顯然我太無知,不知道到底發生了什麼! – Andrew
只要解決:) –