Tôi đang cố gắng sử dụng Vue.js để thực hiện một số phương thức POST cho REST Api của tôi mà tôi đã tạo với Django Rest Framework. Vấn đề là, tôi gặp lỗi CSRF Failed: CSRF token missing or incorrect.
khi tôi đăng. Nhưng tôi có thể thấy cookie csrf và được thêm vào tiêu đề.Django Rest Framework, CSRF và Vue.js
Dưới đây là các thiết lập của tôi:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions'
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
)
}
Dưới đây là cấu hình Vue.js tôi:
var csrftoken = Cookies.get('csrftoken');
Vue.http.headers.common['HTTP_X_CSRFTOKEN'] = csrftoken;
Và đây là phần có liên quan của các tiêu đề đã được gửi:
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/
Như bạn có thể thấy, Cookie.csrf và tiêu đề HTTP_X_CSRFTOKEN khớp với
Tôi thực sự bối rối. Bất kỳ đề xuất?
Cài đặt 'CSRF_HEADER_NAME' bạn sử dụng là gì? Tôi biết rằng 'HTTP_X_CSRFTOKEN' nên là' X-CSRFTOKEN' khi bạn gửi nó, bởi vì django thường định dạng nó trong phạm vi của nó: https://docs.djangoproject.com/en/1.9/ref/settings/#csrf-header- tên – Nevertheless
bạn có ứng dụng của mình trong cùng một tên miền không? hoặc bạn đang sử dụng CORS? –
Yerko Palma là đúng, nó cũng có thể là một vấn đề với chính sách yêu cầu cùng nguồn gốc hoặc cài đặt 'CSRF_COOKIE_HTTPONLY'. – Nevertheless