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

回到顶部