【发布时间】:2020-11-04 02:09:12
【问题描述】:
我唯一的 DRF 身份验证系统是 TokenAuthentication,它仍然在基于函数的视图上请求 CSRF 令牌。我对基于类的视图没有这个问题。
settings.py:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication'
]
}
views.py:
@api_view(['POST'])
@authentication_classes([TokenAuthentication])
def submit_vote(request):
# ...
在 Postman 的 POST 请求中:
Forbidden (CSRF cookie not set.): /rest/submit_vote/
[04/Nov/2020 02:05:38] "POST /rest/submit_vote/ HTTP/1.1" 403 2864
什么?!
我没有任何待处理的迁移。
【问题讨论】:
-
csrf 和 auth 不一样。
-
然后呢? DRF 文档:“如果您使用 SessionAuthentication,则需要为任何 POST、PUT、PATCH 或 DELETE 操作包含有效的 CSRF 令牌。”,我没有使用 SessionAuthentication。
-
DRF 不会给你一个 CSRF 令牌丢失异常,除非你覆盖它的东西。最好检查您的 URL,以便您可能请求其他视图。
标签: python django django-rest-framework