2012-08-22 5 views
7

So verwende ich jquery Datei-Upload in einer Rails 3 App, und alles funktioniert wunderbar, gut, außer in IE 9. Nur in IE9, wenn ich versuche, eine Datei hochzuladen, bekomme ich weiterhin den Fehler "cant verify csrf token" in meiner Konsole. Ich habe Firebug lite installiert, um es zu inspizieren, und das korrekte csrf-Token ist korrekt und an der richtigen Stelle im Dokument (und ja, ich habe mein <% = csrf_meta_tags%> -Tag in der Kopfzeile der Layoutdatei). Nicht sicher, warum es das nur in IE 9 tut, hat das jemand schon mal gesehen?CSRF-Token kann nicht für einen jQuery-Dateiupload überprüft werden, nur IE 9, Rails 3 App

+0

herausgefunden, dass das Problem mit IE ist verwandt mit Iframe-Transport-Uploads Ich habe versucht, die Option "forceIframeTransport" auf "true" zu setzen, und dann wurde das obige Problem in Firefox und anderen Nicht-IE-Browsern repliziert. Ich bin mir immer noch nicht sicher, wie ich es beheben soll. In der Datei $ .ajaxSetup in der Datei jquery.iframe-transport.js habe ich versucht, die json-Antwort zu alarmieren, aber es hat Fehler geworfen und mich nicht losgelassen. Also habe ich gerade versucht, "$ (iframe [0] .body) .text()" zu alarmieren (was versucht wird, in json zu parsen, und ich habe eine wirklich seltsame Antwort bekommen. Vielleicht ist es ein Problem mit ungültigem json, nicht das csrf token? – ggrillone

+3

Endlich bekommen es !!! Das Problem wurde mit IE mit Iframe-Transport-Uploads im Gegensatz zu XHR-Datei-Uploads (die Firefox, Chrome und Safari alle verwenden) verwandt. Wenn ein Browser iframe Transport Uploads verwendet, macht das Plugin ein Aufruf an eine separate Methode, die einen IFrame ein neues Formular im DOM erzeugt.Dieses neue Formular enthielt das csrf-Authentizitätstoken nicht, also musste ich den Wert aus dem anderen Formular übernehmen und vorher in das neue Formular einfügen – ggrillone

+1

Bitte fügen Sie Ihre eigene Antwort hinzu und markieren Sie diese als akzeptiert – zykadelic

Antwort

20

Ich hatte das gleiche Problem und der Kommentar oben aus dem OP hat mir geholfen, die Antwort zu finden. Hier ist, was für mich gearbeitet:

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

Beachten Sie, dass die Layoutdatei (application.html.erb in Rails 3.2) sollte die folgenden:

<%= csrf_meta_tags %> 
+0

Danke Santosh, Ihre Lösung funktioniert perfekt. – datnt