代码之家  ›  专栏  ›  技术社区  ›  Shripad Krishna

如何添加真实性令牌?

  •  9
  • Shripad Krishna  · 技术社区  · 14 年前

    我最近为了一个新的项目转到了googleclosure。在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 回复  |  直到 14 年前
        1
  •  16
  •   alex.zherdev    14 年前

    在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'
                });
    
        2
  •  2
  •   Kevin    8 年前

    Rails现在会自动为它添加一个meta标记,因此在页面javascript中可以使用:

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