Python 如何使用会话身份验证向Django Rest框架发出HTTP请求?

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 = {

我正在尝试访问受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 = {
    '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请求设置