Sto provando a utilizzare Vue.js per eseguire alcuni metodi POST sul mio REST Api che ho creato con Django Rest Framework. Il problema è che sto ricevendo l'errore CSRF Failed: CSRF token missing or incorrect.
quando pubblico. Ma posso vedere il cookie csrf e viene aggiunto alle intestazioni.Django Rest Framework, CSRF e Vue.js
Ecco le mie impostazioni:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions'
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
)
}
Ecco il mio config Vue.js:
var csrftoken = Cookies.get('csrftoken');
Vue.http.headers.common['HTTP_X_CSRFTOKEN'] = csrftoken;
Ed ecco la parte rilevante delle intestazioni che sono stati inviati:
Cookie:djdt=hide; tabstyle=raw-tab; sessionid=1gl533mrneudxw3l9l2vg0ja1yowwmeo; csrftoken=dN85bhztB1oVRov87BsUrWTM29Ff9sjn
Host:127.0.0.1:8000
HTTP_X_CSRFTOKEN:dN85bhztB1oVRov87BsUrWTM29Ff9sjn
Origin:http://127.0.0.1:8000
Referer:http://127.0.0.1:8000/agencies/6/add-profiles/
Come si può vedere, Cookie.csrf e l'intestazione HTTP_X_CSRFTOKEN corrisponde a
Sono davvero perplesso. Eventuali suggerimenti?
Quale impostazione di 'CSRF_HEADER_NAME' si utilizza? So che 'HTTP_X_CSRFTOKEN' dovrebbe essere' X-CSRFTOKEN' quando lo si invia, perché django lo formatta convenzionalmente all'interno del suo budello: https://docs.djangoproject.com/en/1.9/ref/settings/#csrf-header- nome – Nevertheless
hai le tue app nello stesso dominio? o stai usando CORS? –
Yerko Palma ha ragione, potrebbe anche essere un problema con la politica di richiesta dell'origine stessa o l'impostazione 'CSRF_COOKIE_HTTPONLY'. – Nevertheless