Python 如何使用会话身份验证向Django Rest框架发出HTTP请求?
我正在尝试访问受DRF保护的API端点。这需要在请求头中传递CSRF cookie,我已按照如下步骤完成:Python 如何使用会话身份验证向Django Rest框架发出HTTP请求?,python,django,cookies,django-rest-framework,Python,Django,Cookies,Django Rest Framework,我正在尝试访问受DRF保护的API端点。这需要在请求头中传递CSRF cookie,我已按照如下步骤完成: import * as Cookies from "js-cookie"; var csrftoken = Cookies.get('csrftoken'); fetch('/api/myendpoint', { headers: { 'X-CSRFToken': csrftoken }}) .then(response => ...) REST_FRAMEWORK = {
import * as Cookies from "js-cookie";
var csrftoken = Cookies.get('csrftoken');
fetch('/api/myendpoint', { headers: { 'X-CSRFToken': csrftoken }})
.then(response => ...)
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
我已在my settings.py中打开会话身份验证,如下所示:
import * as Cookies from "js-cookie";
var csrftoken = Cookies.get('csrftoken');
fetch('/api/myendpoint', { headers: { 'X-CSRFToken': csrftoken }})
.then(response => ...)
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
Django登录和身份验证对于普通页面正常工作,但对于我的API调用则不正常。我的回答总是出现403错误
未提供身份验证凭据
通过查看Chrome的网络面板中的请求,我检查了X-CSRFToken头值是否正确设置为当前CSRFToken cookie值 找到了答案。csrftoken不应位于GET的请求头中。相反
fetch('/api/workflows', { credentials: 'include' })...
其中包括cookies,如中所述
X-CSRFToken仍必须为PUT、PATCH和DELETE请求设置