【问题标题】:How do i add the authenticity token?如何添加真实性令牌?
【发布时间】:2011-03-09 15:15:17
【问题描述】:

我最近为一个新项目切换到 Google 关闭。我在将真实性令牌添加到 ajax 调用中的标头时遇到问题。我该怎么办?

我的 Ajax sn-p(使用 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'
            });

在后端使用 rails。

更新:

日志:

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)

【问题讨论】:

    标签: ruby-on-rails google-closure-library authenticity-token


    【解决方案1】:

    Rails 现在会自动为其添加元标记,因此您可以在页面中使用 javascript:

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

    【讨论】:

      【解决方案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'
                  });
      

      【讨论】:

      • 我收到了#&lt;Mongrel::HttpParserError: Invalid HTTP format, parsing fails.&gt;。也许它没有考虑到身份验证令牌?我已经用日志更新了我的问题。
      • 我已经相应地更新了答案。似乎你在一个普通的 javascript 文件中有这个调用。您需要在服务器上生成令牌,因此您需要在视图中执行此操作。
      • 我更新了我的问题。它没有考虑到身份验证令牌。
      • OK 带上你的队列我到了这一点:我必须将&lt;%= form_authenticity_token %&gt; 作为变量从我在 html.erb 文件中创建的方法传递给 goog.net.XhrIo 实例方法我遵守的js。但是当我在浏览器中查看源代码时,真实性令牌是可见的。这不是潜在的危险吗?我给你一个赞成票,因为你向我展示了正确的方向。但是,如果您的解决方案没有让我担心安全性,我会接受您的回答。 :)
      • 为了平息你的疑虑,只需观察form_for helpers 生成的任何常见形式的来源:) 关于真实性令牌的主要特点是它是独一无二的,它可见并没有错。请参阅guides.rubyonrails.org/security.html,第 3.1 节
      猜你喜欢
      • 2011-03-04
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2016-11-03
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      相关资源
      最近更新 更多