CSRF失败:CSRF令牌丢失或不正确
我正在使用Django 1.7和django-rest-framework。
我制作了一个API,该API返回了一些JSON数据,并将其放入了我的 settings.py
REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',),
'DEFAULT_RENDERER_CLASSES': (
# 'rest_framework.renderers.XMLRenderer',
'rest_framework.renderers.JSONRenderer',
# 'rest_framework.renderers.BrowsableAPIRenderer',
)
}
当我进行GET调用时,它将返回我所有的数据,但是当我尝试使用PUT / PATCH时,我得到:
--------Response Headers---------Status Code: 403
Date: Wed, 29 Oct 2014 18:51:42 GMT
Vary: Cookie
Server: WSGIServer/0.1 Python/2.7.8
Allow: GET, POST, PUT, PATCH, HEAD, OPTIONS
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
---------------------------------
--------Response Body-----------
{"detail": "CSRF Failed: CSRF token missing or incorrect."}
---------------------------------
仅当我登录时才会发生这种情况,如果我是匿名用户,则可以正确进行PUT / PATCH。
我尝试过@csrf_exempt
,但遇到错误,我rest_framework.permissions.AllowAny
将设置包括在内…
我不知道是怎么回事。有人知道这个问题是什么吗?
回答:
使用SessionAuthentication时,你使用的是Django的身份验证,通常需要检查CSRF。Django REST Framework仅针对强制执行此操作,SessionAuthentication
因此你必须在X-CSRFToken
标头中传递CSRF令牌。
在Django文档提供了检索CSRF令牌使用jQuery和请求发送它的更多信息。CSRF令牌另存为一个cookie csrftoken
,你可以从HTTP响应中检索该cookie,该cookie 随所使用的语言而异。
如果你无法检索CSRF cookie,通常表明你不应该使用SessionAuthentication
。我建议根据你的需要研究TokenAuthentication或OAuth 2.0。
以上是 CSRF失败:CSRF令牌丢失或不正确 的全部内容, 来源链接: utcz.com/qa/433932.html