You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重写JSONWebTokenAPIView的post方法时出现CSRF令牌缺失/错误问题

解决JWT登录接口的CSRF Forbidden错误

首先,我注意到你的代码里有两个关键问题导致了这个CSRF错误,我们一步步来修复:

1. URL配置中缺少as_view()方法

类视图在Django的URL配置里不能直接使用类本身,必须调用as_view()方法来生成可调用的视图函数。你的urls.py里的配置写错了:

原代码:

path('login-jwt-over/', views.LoginDrfJwtView),

修正后:

path('login-jwt-over/', views.LoginDrfJwtView.as_view()),

这是非常常见的错误,没有调用as_view()会导致Django无法正确处理类视图的请求生命周期,进而触发不必要的CSRF验证。

2. 错误的super调用参数

你在重写post方法时,super的参数使用错误,这会导致没有正确调用父类ObtainJSONWebToken的post方法,而是直接跳到了更上层的父类方法,丢失了JWT视图自带的CSRF豁免逻辑。

原代码:

response = super(ObtainJSONWebToken, self).post(request, *args, **kwargs)

修正方式(二选一):

  • Python 3 推荐写法(自动识别当前类和父类):
response = super().post(request, *args, **kwargs)
  • 显式指定当前子类:
response = super(LoginDrfJwtView, self).post(request, *args, **kwargs)

额外注意:post方法返回值不合法

另外,我看到你在条件满足时返回了return True,这不符合DRF视图的要求——视图必须返回一个Response对象,而不是布尔值。你需要把这段代码改成返回合法的Response,比如:

if condition == True:
    # 你的自定义逻辑
    return response  # 或者构造新的Response对象(如Response({"msg": "success"}))

验证修复效果

把这两处错误修正后,重新启动服务,调用登录接口应该就不会再出现CSRF token缺失的错误了。本质上,ObtainJSONWebToken视图本身已经处理了CSRF豁免,但因为你的URL配置和super调用错误,导致这个逻辑没有生效。

内容的提问来源于stack exchange,提问作者Negiiii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:50:51