0

我目前正在开发一个项目,其中后端由 Django 处理,前端由 ReactJS 处理。

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

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

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

我已经开始创建 API,我的 List 和 Retrieve API 工作正常,但是每当前端开发人员在 a 上执行 POST 请求时CreateAPIView,他都会收到带有 description 的 403 错误csrf cookie not set

我的 runserver 日志文件也出现 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_FRAMEWORKDRF 文档相同。

谢谢。非常感谢指导。

4

1 回答 1

1

在发出 POST、PATCH、PUT 请求时从您的前端修改您的请求标头以包含“X-CSRFToken”。此标头的值应从名为“csrftoken”的 cookie 中读取。

请参阅这些以获取更多信息

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

于 2019-07-25T14:40:11.383 回答