Как добавить токен подлинности?

Недавно я переключился на закрытие Google для нового проекта. У меня возникли проблемы с добавлением токена подлинности в заголовки в вызове ajax. Как мне это сделать?

Мой фрагмент Ajax (с использованием класса goog.net.XhrIo):

var initialHTMLContent = superField[i].getCleanContents();

var data = goog.Uri.QueryData.createFromMap(new goog.structs.Map({
  body: initialHTMLContent
 }));

 goog.net.XhrIo.send('/blogs/create', function(e) {
    var xhr = /** @type {goog.net.XhrIo} */ (e.target);
    alert(xhr.getResponseXml());
 }, 'POST', data.toString(), {
    'Accept' : 'text/xml'
            });

Использование рельсов в бэкенде.

ОБНОВЛЕНИЕ:

Журнал:

Processing BlogsController#create (for 127.0.0.1 at 2010-06-29 20:18:46) [PUT]
  Parameters: {"authenticity_token"=>""}

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):


Rendered rescues/_trace (272.4ms)
Rendered rescues/_request_and_response (1.2ms)
Rendering rescues/layout (unprocessable_entity)

person Shripad Krishna    schedule 29.06.2010    source источник


Ответы (2)


Где-то в представлении rails (файл .html.erb) вы можете установить переменную js следующим образом:

window._token = '<%= form_authenticity_token %>';

А затем добавьте его в свой вызов:

 goog.net.XhrIo.send('/blogs/create?authenticity_token=' + window._token, function(e) {
    var xhr = /** @type {goog.net.XhrIo} */ (e.target);
    alert(xhr.getResponseXml());
 }, 'POST', data.toString(), {
    'Accept' : 'text/xml'
            });
person alex.zherdev    schedule 29.06.2010
comment
Я получаю #<Mongrel::HttpParserError: Invalid HTTP format, parsing fails.>. Может быть, он не учитывает токен авторизации? Я обновил свой вопрос в журнале. - person Shripad Krishna; 29.06.2010
comment
Я обновил ответ соответственно. Кажется, у вас есть этот вызов в простом файле javascript. Вам нужно сгенерировать токен на сервере, поэтому вам нужно сделать это в представлении. - person alex.zherdev; 29.06.2010
comment
Я обновил свой вопрос. Он не принимает во внимание токен авторизации. - person Shripad Krishna; 29.06.2010
comment
ОК, принимая вашу очередь, я дошел до этого момента: мне пришлось передать <%= form_authenticity_token %> в качестве переменной из метода, который я создал в файле html.erb, в метод экземпляра goog.net.XhrIo в моем скомпилированном js. Но токен подлинности виден, когда я просматриваю исходный код в браузере. Это не потенциально опасно? Я ставлю вам голос за то, что вы указали мне правильное направление. Но я приму ваш ответ, если ваше решение не заставит меня беспокоиться о безопасности. :) - person Shripad Krishna; 29.06.2010
comment
чтобы развеять ваши сомнения, просто понаблюдайте за источниками любой обычной формы, сгенерированной form_for хелперами :) главное в токене подлинности то, что он уникален, нет ничего плохого в том, что он виден. см. guides.rubyonrails.org/security.html, раздел 3.1. - person alex.zherdev; 29.06.2010
comment
Спасибо :) Приму ваш ответ. Спасибо также за эту ссылку. Я не изучал аспекты безопасности в направляющих рельсах. Есть повод заглянуть прямо сейчас. - person Shripad Krishna; 29.06.2010

Rails теперь автоматически добавляет для него метатег, поэтому в javascript вашей страницы вы можете использовать:

 token = $( 'meta[name="csrf-token"]' ).attr( 'content' )
person Kevin    schedule 12.12.2016