如何添加真实性令牌?

Shr*_*hna 9 ruby-on-rails authenticity-token google-closure-library

我最近切换到谷歌关闭一个新项目.我在向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'
            });
Run Code Online (Sandbox Code Playgroud)

在后端使用导轨.

更新:

日志:

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)
Run Code Online (Sandbox Code Playgroud)

ale*_*dev 15

在rails视图(.html.erb文件)中的某个位置,您可以像这样设置一个js变量:

window._token = '<%= form_authenticity_token %>';
Run Code Online (Sandbox Code Playgroud)

然后将其附加到您的通话中:

 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'
            });
Run Code Online (Sandbox Code Playgroud)

  • 为了平息你的疑虑,只需观察`form_for`帮助者生成的任何常用形式的来源:)真实性令牌的主要内容是它是独一无二的,它是可见的没有错.请参阅http://guides.rubyonrails.org/security.html,第3.1节 (2认同)