通过 Hoppscotch 向 Django 发出 POST 请求时缺少 CSRF 令牌

问题描述 投票:0回答:1

我正在使用 Django(版本 4.0+)应用程序,并在尝试使用 Hoppscotch 发出 POST 请求时面临 CSRF 验证问题。我收到以下错误:

{ "detail": "CSRF 失败:CSRF 令牌丢失。" }

这是我的 POST 请求的 JSON 正文:

{ "title": "嘉年华啊啊啊啊啊啊", "description": "庆祝活动", “日期”:“2023-11-28T01:16:10Z”, "location": "恩我家" }

我知道我需要在请求标头中包含 CSRF 令牌,但我不确定在使用 Hoppscotch 时如何获取此令牌。我向服务器发出了 GET 请求,希望看到一个可用于后续 POST 请求的

csrftoken
cookie,但我在响应标头中找不到它。以下是我收到的响应标头:

允许:GET、POST、HEAD、OPTIONS 内容长度:141 内容类型:应用程序/json ...(其他标题)

CSRF 令牌中不会出现

Set-Cookie
标头。有没有特定的方法来配置 Hoppscotch 或 Django 来完成这项工作?我不知道如何在这种环境下继续使用 CSRF 令牌。

任何建议或指导将不胜感激。

提前谢谢您。

django rest http-headers csrf hoppscotch
1个回答
0
投票

在开发过程中,我在 drf 中间件中全局免除了 csrf 检查,以允许更简单的 HTTP API 测试。

# settings.py
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "rest_framework.authentication.SessionAuthentication",
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    ]
    if not DEBUG
    else [
        "common.permissions.CsrfExemptSessionAuthentication",  # disable csrf during development
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    ],
...

# common/permissions.py
class CsrfExemptSessionAuthentication(SessionAuthentication):
    def enforce_csrf(self, request):
        return  # To not perform the csrf check previously happening
© www.soinside.com 2019 - 2024. All rights reserved.