我正在尝试使用 Vue.js 对我使用 Django Rest Framework 创建的 REST Api 执行一些 POST 方法。问题是,我得到了CSRF Failed: CSRF token missing or incorrect.
我发帖时出错。但我可以看到 csrf cookie,并且它被添加到标头中。
这是我的设置:
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 标头名称错误造成的。根据文档:
与 request.META 中的其他 HTTP 标头一样,收到的标头名称
通过将所有字符转换为来标准化来自服务器的
大写,用下划线替换所有连字符,并添加
名称的“HTTP_”前缀。例如,如果您的客户发送
“X-XSRF-TOKEN”标头,设置应为“HTTP_X_XSRF_TOKEN”。
另外我在这里留下一个参考我的问题 https://stackoverflow.com/questions/35868312/django-1-9-ajax-form-csrf-token-403-error-csrf-cookie-not-set,这积累了几个可能导致的问题CSRF Failed: CSRF token missing or incorrect.
Django 中的错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)