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

时间:2017-02-27 00:50:50

标签: python django cookies django-rest-framework

我正在尝试访问受DRF session authentication保护的API端点。这需要在请求标头中传递CSRF cookie,这是我在Django docs之后完成的,如下所示:

import * as Cookies from "js-cookie";
var csrftoken = Cookies.get('csrftoken');

fetch('/api/myendpoint', { headers: { 'X-CSRFToken': csrftoken }})
  .then(response => ...)

我在settings.py中启用了会话身份验证,如下所示:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}

Django登录和身份验证对普通页面正常工作,但不适用于我的API调用。我总是在响应中收到403错误

  

未提供身份验证凭据。

我已经通过查看Chrome网络面板中的请求检查了X-CSRFToken标头值是否已正确设置为当前的csrftoken cookie值。

1 个答案:

答案 0 :(得分:1)

找到答案here。 csrftoken不应该在GET的请求头中。取而代之的是,

fetch('/api/workflows', { credentials: 'include' })...

,其中包含Cookie,如Fetch docs

中所述

仍然必须为PUT,PATCH和DELETE请求设置X-CSRFToken

相关问题