使用rest_framework.authtoken.views.obtain._auth_token时出现CSRF错误

时间:2013-06-15 01:09:28

标签: django django-rest-framework

我从网址调用obtain.auth_token,如下所示

url(r'^api-token/','rest_framework.authtoken.views.obtain_auth_token')

我回来了

{
detail: "CSRF Failed: CSRF token missing or incorrect."
}

我想知道为什么会发生这种情况,因为我的印象是django-rest-framework通常是CSRF豁免

由于

4 个答案:

答案 0 :(得分:2)

该视图使用POST。 DRF始终要求CSRF用于会话验证的POST。

出于这个原因,获取身份验证令牌等敏感请求应该使用POST。

答案 1 :(得分:1)

我有完全相同的问题。检查您是否已退出浏览器。

答案 2 :(得分:1)

我也碰到了这个。如果其他人不清楚,请添加答案。

  1. 请确保您未在​​已登录的情况下申请,例如:来自浏览器(退出,尝试以隐身模式,或清除您的cookie)。
  2. 确保您确实正确使用api-token端点。我最初尝试使用Basic Auth,假设这个令牌生成视图受到保护,但DRF实际上需要包含usernamepassword字段的表单数据
  3. 以下是使用requests的工作示例:

    r = requests.post('http://example.com/api-token/'), data={
        'username': username,
        'password': password,
    })
    token = r.json()['token']
    

答案 3 :(得分:0)

按顺序提供文档 http://www.django-rest-framework.org/topics/ajax-csrf-cors/ 你必须实现ajax-csrf如何解释 https://docs.djangoproject.com/en/dev/ref/csrf/#ajax

...如果您使用的是angularjs,可以查看Django csrf token + Angularjs