Как добавить токен подлинности?
Я недавно переключился на закрытие 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)
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'
});
Rails теперь автоматически добавляет метатег для него, поэтому в вашем javascript вашей страницы вы можете использовать:
token = $( 'meta[name="csrf-token"]' ).attr( 'content' )