django - 被禁止(CSRF 令牌丢失或不正确。):/myurl/ 覆盖 JSONWebTokenAPIView 发布方法时出错
问题描述
我继承了ObtainJSONWebToken并试图覆盖JSONWebTokenAPIView的post方法,但每次我点击API都会抛出错误:禁止(CSRF令牌丢失或不正确。):/myurl/
视图.py
from rest_framework_jwt.views import ObtainJSONWebToken
class LoginDrfJwtView(ObtainJSONWebToken):
def post(self, request, *args, **kwargs):
response = super(ObtainJSONWebToken, self).post(request, *args, **kwargs)
if condition == True:
# my code
return True
设置.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
JWT_AUTH = {
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300)
}
网址.py
from django.urls import path
from . import views
urlpatterns = [
path('login-jwt-over/', views.LoginDrfJwtView),
]
解决方案
向这个基于类的视图添加一个绕过 CSRF 检查的身份验证类。CSRF 错误发生在没有定义任何身份验证类的视图上。
您需要创建一个继承自 SessionAuthentication 并始终返回的身份验证类。它可能类似于以下内容:
from rest_framework.authentication import SessionAuthentication
class CsrfExemptAuth(SessionAuthentication):
def bypass_csrf(self, request):
return
然后,在您看来,添加到 authentication_classes。
authentication_classes = (CsrfExemptAuth,)
推荐阅读
- python - OpenCV recoverPose 相机坐标系
- dart - 如何在列表视图中保留列表项时在 appbar 中显示 DELETE 和 EDIT?
- excel - 使用VBA将excel图表复制到ppt
- c++ - C++ 的概念和 Rust 的 trait 有何异同?
- python - 如何迭代自定义对象的属性名称
- python - 在 Python 中获取按键(pygame)
- lua - lua -> 如何将这些参数修改为 const,或者我应该怎么做?
- python - 根据与熊猫的部分匹配合并列
- python - Numpy多维数组分配未知逻辑错误
- twitter - 为什么 twidge 应用程序给我 E:尝试在 Ubuntu 18.04 上执行 apt-get 时无法找到包 twidge