2015-08-04 8 views
10

Ich versuche, eine Bilddatei Prahlerei laden mit wirftcsrf ist fehlgeschlagen, während die Datei durch Prahlerei Hochladen

{ „Detail“: „CSRF fehlgeschlagen:. CSRF-Token oder falsch fehlt“ }

. Es ist wichtig zu erwähnen, dass ich Django-Rest-Swagger Version 0.3.0 und Django Version 1.7 verwende.

YAML ein Bild für das Hochladen wie folgt aussieht:

parameters: 
    - name: image 
     in: formData 
     required: true 
     type: file 
    - name: caption 
     required: true 
     type: string 

Ich will nicht verwenden @csrf_exempt. Ich habe versucht, einen Header hineinzugeben, aber das hat nicht funktioniert. Kopf war so etwas wie:

- name: X-CSRF-Token 
     description: csrftoken to be passed in header 
     in: header 
     required: true 
     type: string 

jede mögliche Hilfe geschätzt wird.

+1

Haben Sie das CSRF-Token-Tag in Ihrem HTML? –

+0

Haben Sie dieses Problem herausgefunden? Ich habe das identische Problem. Es ist nur ein Problem für die API, die den Datei-Upload hat. Alle anderen API-Endpunkte funktionieren einwandfrei. –

+0

Ich weiß nicht viel, was mit swagger und yaml passiert, aber was ich sehe, ist, dass Sie den csrf-Token als Header übergeben. Es muss nur mit den formdata übergeben werden.name: csrfmiddlewaretoken value: get from entweder cookie oder die Formulareingaben –

Antwort

0

Erstens, ich bin nicht über Prahlerei verstehen so ..

, wenn Sie HTML und jquery auf Front-End-Ansicht verwenden, Sie dies, wenn verwenden können, Ihre Daten veröffentlichen.

w.getCsrfToken = function() { 
    // Extract CSRF token from cookies 
    var cookies = document.cookie.split(';'), 
     csrf_token = null; 
    $.each(cookies, function (index, cookie) { 
     var cookieParts = $.trim(cookie).split('='); 
     if (cookieParts[0] === 'csrftoken') { 
      csrf_token = cookieParts[1]; 
     } 
    }); 
    return csrf_token; 
}; 
-1

das ganze CSRV Problem bearbeiten die Ansichten entfernen

from django.views.decorators.csrf import csrf_protect 
from django.template import RequestContext 
from django.shortcuts import render_to_response 

@csrf_protect 
def any_function(request): 
    csrfContext = RequestContext(request) 
    return render_to_response('htmlpage', csrfContext) 
0

ich hatte das gleiche Problem, wenn Sie auf dem Laufenden mit Django sind, dann ist es nur ein misnamed Header.

Verwenden Sie 'X-CSRFToken' anstelle von 'X-CSRF-Token', das hat für mich funktioniert.

0

Sie wissen nicht, über Prahlerei, aber wenn Jquery Ajax ich dies immer wie folgt:

$.ajaxSetup({ 
    data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, 
}); 

Hoffe, dass es

0

Acess CSRF-Token in der Vorlage hilft.

{% csrf_token %} 

Greifen Sie auf dieses Token in der JavaScript-Vorlage zu.

Fügen Sie es in die Header ein, bevor Sie die API aufrufen.

headers:{'X-CSRFToken': token} 

Ich hoffe, es wird den Fehler beheben.

Verwandte Themen