Próbuję użyć Vue.js do wykonania niektórych metod POST do mojego REST Api, które stworzyłem z Django Rest Framework. Problem polega na tym, że podczas wysyłania wiadomości pojawia się błąd CSRF Failed: CSRF token missing or incorrect.
. Ale widzę plik cookie csrf i jest on dodawany do nagłówków.Django Rest Framework, CSRF i Vue.js
Oto moje ustawienia:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions'
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
)
}
Oto mój Vue.js config:
var csrftoken = Cookies.get('csrftoken');
Vue.http.headers.common['HTTP_X_CSRFTOKEN'] = csrftoken;
A oto odpowiednia część nagłówków, które zostały wysłane:
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/
jak ty można zobaczyć, Cookie.csrf i nagłówek nagłówka HTTP_X_CSRFTOKEN
Naprawdę jestem zakłopotany. Jakieś sugestie?
Jakie ustawienie "CSRF_HEADER_NAME" używasz? Wiem, że 'HTTP_X_CSRFTOKEN' powinno być' X-CSRFTOKEN' kiedy je wysyłasz, ponieważ django konwencjonalnie formatuje je wewnątrz jego odwagi: https://docs.djangoproject.com/en/1.9/ref/settings/#csrf-header- nazwa – Nevertheless
czy masz aplikacje w tej samej domenie? czy używasz CORS? –
Yerko Palma ma rację, może to być problem z polityką żądania o takim samym pochodzeniu lub ustawieniem "CSRF_COOKIE_HTTPONLY". – Nevertheless