姜戈 csrf_cookie_not_set

Django csrf_cookie_not_set

我目前正在做一个后端由 Django 处理,前端由 ReactJS 处理的项目。

以前的开发人员(他们已经不在组织中了)都是手工开发所有的API。我猜他们不知道 DjangoRestFramework。我现在的工作是 REST-ify 50 个目前正在运行的奇数 API。

我正在使用 DRFs 通用视图(列表、创建、检索...等)。

我也被分配执行DRFSimpleJWT的任务。之前的开发人员手动编写了所有用于创建令牌的函数,他们将其称为 custom authentication.

我已经开始创建 API,我的 List 和 Retrieve API 工作正常,但每当前端开发人员对 CreateAPIView 执行 POST 请求时,他会返回一个 403 错误,描述为 csrf cookie not set.

我的运行服务器日志文件中也出现 403 错误。

我试过禁用(评论)permission_classes 并将其更改为 AllowAny

然后我继续禁用 authentication_classes 或删除 session_authentication

在某些情况下,数据甚至没有通过,OPTIONS 出现在我的服务器日志中。

我检查了 settings.py 文件,发现 csrfmiddleware 被禁用了。启用它会在所有请求上产生 csrf 错误。我用谷歌搜索并使用了 cors 设置和 django 设置。没有任何效果。

我的看法很简单:

MyCreateView(generics.CreateAPIView):
queryset = ModelName.objects.all
serializer_class =MySerializer
permission_classes = [IsAuthenticated,]
authentication_classes = [BasicAuthentication, SessionAuthentication,]

我需要帮助才能使 POST 请求生效。另外,当我开始使用 SimpleJWT 时,是否需要在我的视图中指定 authentication_classes?这与cors有关吗?

settings.py REST_FRAMEWORK 与 DRF 文档相同。

谢谢。非常感谢您的指导。

在创建 POST、PATCH、PUT 请求时从您的前端修改您的请求 header 以包含 "X-CSRFToken"。此 header 的值应从名为 "csrftoken".

的 cookie 中读取

参考这些以获取更多信息

https://docs.djangoproject.com/en/2.2/ref/csrf/#ajax https://www.django-rest-framework.org/topics/ajax-csrf-cors/#csrf-protection