Ne ho visto molto su SO, ma nulla può risolvere il mio problema.Django 1.9 AJAX modulo errore CSRF token 403 - "cookie CSRF non impostato"
Problema:
Con CSRF middleware abilitato, Django risponde con 403 su AJAX modulo di richiesta, affermando: "biscotto CSRF non impostata"
Dopo la documentation, una funzionalità di JS è stato implementato, che imposta personalizzati "X-CSRFToken" intestazione.
Esso funziona come previsto, si "csrftoken" cookie dal browser e messaggi insieme con richiesta AJAX:
x-csrftoken: 1a0u7GCQG0wepZHQNThIXeYpMy2lZOf2
Ma la risposta è ancora 403.
soluzioni provato:
Ho provato tutto quello che ho trovato su SO o sul web, in particolare:
controllando che il middleware è abilitato:
MIDDLEWARE_CLASSES = [ ... 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', ... ]
Browser diversi con i cookie abilitati;
Decorare la mia vista con
@ensure_csrf_cookie
;Impostazione
{% csrf_token %}
nel modello;Utilizzo del collegamento
render
che accetta il contesto della richiesta corretta;Impostazione personalizzata
CSRF_COOKIE_NAME
eCSRF_HEADER_NAME
nel miosettings.py
;Impostazione esplicita
CSRF_COOKIE_SECURE = False
eCSRF_COOKIE_HTTPONLY = False
;Impostazione esplicita dell'impostazione
CSRF_TRUSTED_ORIGINS
;Test su server di sviluppo e produzione;
Anche a
request.META["CSRF_COOKIE_USED"] = True
a mio avviso, come qualcuno ha suggerito.
E ancora non ha ottenuto nulla.
intestazioni:
Se uso @csrf_exempt
e print(request.META)
a mio avviso, è chiaro che intestazione personalizzata "X-CSRFToken" è presente nella richiesta e formattata in base alla documentazione Django, con il prefisso "HTTP_" , ha sostituito i trattini con caratteri di sottolineatura, tutti maiuscoli: "HTTP_X_CSRFTOKEN".
Ancora di più, è una corrispondenza di valori con il set di cookie di Django.
Cookies:
cosa strana è che se provo a print(request.COOKIES)
a mio avviso, a pagina e la forma del carico posso vedere "csrftoken" cookie di lì, ma dizionario è vuota su richiesta AJAX . Può essere il problema?
Alla disperata ricerca di ciò che è effettivamente sbagliato. Grazie per aver letto questo.
Puoi mostrare la vostra vista reale e JavaScript? – Alasdair
Che cosa stai utilizzando per inviare una richiesta AJAX? jQuery? – Smile0ff
@ Smile0ff: API di recupero. – Nevertheless