9

Recientemente cambié al cierre de Google para un nuevo proyecto. Tengo problemas para agregar el token de autenticidad a los encabezados en una llamada ajax. ¿Cómo lo hago?¿Cómo agrego el token de autenticidad?

Mi fragmento Ajax (usando la clase 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' 
      }); 

El uso de rieles en el backend.

ACTUALIZACIÓN:

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) 

Respuesta

15

En algún lugar en una vista carriles (archivo .html.erb) se puede establecer una variable js así:

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

Y luego añádalo en su llamada:

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

me sale un '# '. ¿Tal vez no está teniendo en cuenta el token de autenticación? He actualizado mi pregunta con el registro. –

+0

He actualizado la respuesta en consecuencia. Parece que tienes esta llamada en un archivo JavaScript simple. Necesita generar el token en el servidor, por lo que debe hacer esto en una vista. –

+0

He actualizado mi pregunta. No está teniendo en cuenta el token de autenticación lo que nunca. –

2

rieles ahora añade automáticamente una etiqueta meta para ello, por lo que a continuación, en su página de JavaScript que puede utilizar:

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