По нескольким причинам мне нужно отправить запрос на сообщение в контроллер через Ajax, и я не могу сделать это с использованием формы, это должен быть запрос JS Ajax, написанный внутри файла в активах> javascript или между тегами.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 из раствора Аникет в. Добавление
authenticity_token: true
в хеш опций формы решается вопрос, а
Привет Aniket, спасибо это работает. Хотя я использую простую форму, я добавил строку выше, и Rails перестала жаловаться. Однако теперь он обвиняет ** ActionController :: UnknownFormat **. Это странно, так как форма установлена на remote: true, и мой контроллер отвечает JS, и он работает, если я отправлю форму с помощью кнопки отправки. Любые подсказки о том, что будет проблемой. – Andrew
Кстати, проблема CSRF проблемы также решена путем добавления authenticity_token: true в хэш-настройках формы. Возможно, это связано с тем, как работает tinyMCE, что мешает Rails по умолчанию создавать токен аутентификации. Ясно, что я слишком невежествен, чтобы знать, что, черт возьми, происходит! – Andrew
Пока его разрешено :) –