我想使用Vue.js做一些POST方法到我用RANGA的Api創建的Django Rest框架。問題是,我發佈時遇到了CSRF Failed: CSRF token missing or incorrect.
錯誤。但我可以看到csrf cookie,並將其添加到標題中。Django Rest框架,CSRF和Vue.js
這裏是我的設置:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions'
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
)
}
這裏是我的Vue.js配置:
var csrftoken = Cookies.get('csrftoken');
Vue.http.headers.common['HTTP_X_CSRFTOKEN'] = csrftoken;
而這裏的標題的相關部分被髮送的:
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/
正如你可以看到,Cookie.csrf和HTTP_X_CSRFTOKEN標題匹配
我真的很難過。有什麼建議麼?
您使用什麼'CSRF_HEADER_NAME'設置?我知道'HTTP_X_CSRFTOKEN'發送時應該是'X-CSRFTOKEN',因爲django通常將它格式化爲它的內容:https://docs.djangoproject.com/en/1.9/ref/settings/#csrf-header-名稱 – Nevertheless
你有你的應用程序在同一個域名?或者你在使用CORS? –
Yerko Palma是對的,它也可能是同源請求策略或CSRF_COOKIE_HTTPONLY設置的問題。 – Nevertheless