我正在使用 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 令牌。
任何建议或指导将不胜感激。
提前谢谢您。
在开发过程中,我在 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