9

Ich bin kürzlich zu Google Closure für ein neues Projekt gewechselt. Ich habe Probleme, das Authentizitätstoken zu den Überschriften in einem Ajaxanruf hinzuzufügen. Wie gehe ich vor?Wie füge ich das Authentizitätstoken hinzu?

Mein Ajax-Schnipsel (mit goog.net.XhrIo Klasse):

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' 
      }); 

Schienen im Backend verwenden.

UPDATE:

Log:

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) 

Antwort

15

Irgendwo in einer Schienen-Ansicht (.html.erb Datei) können Sie eine js Variable wie folgt einstellen:

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

Und Dann fügen Sie es in Ihren Anruf:

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' 
      }); 
+0

ich ein '# get '. Vielleicht berücksichtigt es nicht den Authentifizierungs-Token? Ich habe meine Frage mit dem Protokoll aktualisiert. –

+0

Ich habe die Antwort entsprechend aktualisiert. Scheint, dass Sie diesen Aufruf in einer einfachen JavaScript-Datei haben. Sie müssen das Token auf dem Server generieren, also müssen Sie dies in einer Ansicht tun. –

+0

Ich habe meine Frage aktualisiert. Es berücksichtigt nicht das Authentifizierungs-Token was auch immer. –

2

Rails fügt nun automatisch ein Meta-Tag für sie, so dann in Ihre Seite Javascript Sie verwenden können:

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