Ho cercato di risolvere lo stesso problema, e come arnaud576875 dice che devi aggiungere l'intestazione del token csrf su ogni richiesta Ajax proprio come i documenti Django dice https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax ed eseguire quel codice prima di qualsiasi richiesta Ajax che fai.
Ma c'è qualcosa di aggiuntivo, devi trovare un modo per caricare il token csrf sui cookie della tua app prima di provare a fare qualsiasi richiesta AJAX, dopo molte ore dolorose di ricerca non sono riuscito a trovare una risposta specifica di come fare questo, quello che ho trovato è che per garantire che la tua vista mandi il token csrf all'interno di un cookie puoi usare lo ensure_csrf_token()
per ogni vista che vuoi ricevere il token https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#django.views.decorators.csrf.ensure_csrf_cookie questo sembra funzionare per molte persone, ma non ha funzionato per me
Un altro modo è utilizzare il metodo legacy, aggiungendo il 'django.middleware.csrf.CsrfResponseMiddleware'
al numero MIDDLEWARE_CLASSES
ma non è consigliabile questo metodo in quanto comporta diversi rischi per la sicurezza. https://docs.djangoproject.com/en/1.2/ref/contrib/csrf/#legacy-method
Tutti questi metodi che ho detto prima non hanno funzionato per me. Il modo in cui sto permettendo Ajax per fare alcune richieste è come il seguente, e se qualcuno trova questo un metodo pericoloso per favore fatemelo sapere:
- Vai alla prima vista che l'utente colpirà, come il/casa/pagina.
- inserire questo prima di reindirizzare o parsing nulla
request.META["CSRF_COOKIE_USED"] = True
E questo è tutto, Questo è il modo che funziona per me, ma come ho detto prima non sono sicuro se questo è il metodo giusto o il più sicuro uno per realizzare la protezione CSRF.
credo che si può trovare la risposta [qui] (https://docs.djangoproject.com/en/dev/ref/contrib/csrf/). La soluzione più semplice sembra disabilitare la protezione CSRF sull'istanza di django. La prossima opzione migliore è aggiornare il tuo login JavaScript per prelevare il token CSRF di django dal modulo e includerlo come parte della richiesta AJAX. – aroth
Date un'occhiata alla mia risposta precedente. http://stackoverflow.com/questions/6506897/csrf-token-missing-or-incorrect-while-post-parameter-via-ajax-in-django/6533544#6533544 – sigurd