2012-08-22 13 views
7

Así que estoy usando subir archivos jquery en una aplicación de rails 3, y todo funciona muy bien, excepto en IE 9. Solo en IE9, cuando intento subir un archivo, sigo recibiendo el error "no puedo verificar el token csrf" en mi consola. Instalé Firebug lite para inspeccionarlo, y el token csrf correcto es correcto y está en el lugar correcto en el documento (y sí, tengo mi etiqueta <% = csrf_meta_tags%> en el encabezado del archivo de diseño). No estoy seguro de por qué solo está haciendo esto en IE 9, ¿alguien ha visto esto antes?No se puede verificar el token CSRF para una carga de archivos jQuery, solo IE 9, aplicación Rails 3

+0

dimos cuenta de que el problema está relacionado con el uso de IE cargas de transporte iframe. Traté de cambiar la opción "forceIframeTransport" a verdadero, y luego el problema anterior se replicó en Firefox y otros navegadores que no sean IE. Todavía no estoy seguro de cómo solucionarlo. En $ .ajaxSetup en el archivo jquery.iframe-transport.js, intenté alertar a la respuesta json, pero seguía arrojando errores y no me dejaba. Así que intenté "alertar" al "$ (iframe [0] .body) .text()" (que intenta analizar en json, y obtuve una respuesta realmente extraña. Así que tal vez sea un problema con json no válido, no el token csrf? – ggrillone

+3

¡Finalmente lo entendí! El problema estaba relacionado con IE al usar cargas de transporte iframe en comparación con cargas de archivos XHR (que Firefox, Chrome y Safari usan todos). Si un navegador usa cargas de transporte iframe, el complemento hace una llamada a un método separado, que genera un iframe con una nueva forma en el DOM. Este nuevo formulario no incluía el token de autenticidad csrf, así que tuve que tomar el valor del otro formulario y anexarlo al nuevo antes de que sea enviado – ggrillone

+1

Agregue su propia respuesta y márquela como aceptada – zykadelic

Respuesta

20

Tuve el mismo problema y el comentario anterior del PO me ayudó a encontrar la respuesta. Esto es lo que funcionó para mí:

$('#fileupload').fileupload({ 
    ... other options 
    formData: [ 
    { name: 'authenticity_token', value: $('meta[name="csrf-token"]').attr('content') } 
    ] 
}); 

Tenga en cuenta que el archivo de diseño (application.html.erb en Rails 3.2) debe tener lo siguiente:

<%= csrf_meta_tags %> 
+0

Gracias Santosh, su solución funciona a la perfección. – datnt

Cuestiones relacionadas