2015-08-04 17 views
10

Sto cercando di caricare un file di immagine con spavalderia gettaCSRF non riuscita durante il caricamento del file attraverso spavalderia

{ "dettaglio": "CSRF non riuscita:. CSRF gettone mancanti o errati" }

. È importante menzionare che sto usando la versione 0.3.0 di django-rest-swagger e la versione 1.7 di django.

YAML per il caricamento di un quadro si presenta come:

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

Non voglio usare @csrf_exempt. Ho provato a passare un'intestazione in questo, ma non ha funzionato. intestazione era qualcosa di simile:

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

qualsiasi aiuto sarà apprezzato.

+1

Hai il tag token CSRF nel tuo codice HTML? –

+0

Hai scoperto questo problema? Sto avendo lo stesso problema. È solo un problema per l'API che ha il caricamento del file. Tutti gli altri endpoint dell'API funzionano correttamente. –

+0

Non so molto di quello che sta succedendo con swagger e yaml, ma quello che vedo è che stai passando il token csrf come intestazione. Deve essere passato solo con i dati del form.nome: valore csrfmiddlewaretoken: ottieni dal cookie o dagli input del modulo –

risposta

0

In primo luogo, non sto capire circa spavalderia così ..

se si utilizza HTML e jQuery sul tuo vista front-end, è possibile utilizzare questo quando, inviare i vostri dati.

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

rimuovere l'intero problema CSRV modificare il punto di vista

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

ho avuto lo stesso problema, se siete al passo con Django, è solo un colpo di testa misnamed.

Utilizzare 'X-CSRFToken' invece di 'X-CSRF-Token', che ha funzionato per me.

0

Non so circa spavalderia, ma quando si utilizza jQuery Ajax Io uso sempre questo:

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

Speranza che aiuta

0

Acess CSRF token nel modello.

{% csrf_token %} 

Accedi a quel token nel modello JavaScript.

const token = $("input[name='csrfmiddlewaretoken']").val(); 

Includerlo nelle intestazioni prima di effettuare una chiamata all'API.

headers:{'X-CSRFToken': token} 

Spero che risolva l'errore.

Problemi correlati