使用 rest_framework.authtoken.views.obtain._auth_token 时出现 CSRF 错误
Posted
技术标签:
【中文标题】使用 rest_framework.authtoken.views.obtain._auth_token 时出现 CSRF 错误【英文标题】:CSRF error when using rest_framework.authtoken.views.obtain._auth_token 【发布时间】:2013-06-11 17:46:57 【问题描述】:我从 url 调用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 豁免的
谢谢
【问题讨论】:
这个链接有帮助吗? groups.google.com/forum/?fromgroups#!topic/… 不是特别是它不是同一个问题。 【参考方案1】:该视图使用 POST。 DRF 总是要求 CSRF 用于会话认证的 POST。
出于这个原因,获取身份验证令牌等敏感请求应使用 POST。
【讨论】:
【参考方案2】:我遇到了完全相同的问题。检查您是否已退出浏览器。
【讨论】:
我不得不退出并刷新登录页面,然后效果很好。谢谢!【参考方案3】:我也遇到了这个。添加答案以防其他人不清楚。
-
确保您不是在已登录的环境中请求,例如从浏览器(退出,尝试以隐身模式,或清除您的 cookie,如果您是)。
确保您实际上正确使用了
api-token
端点。我最初尝试使用 Basic Auth,假设这个生成令牌的视图受到保护,但 DRF 实际上希望 form data 包含 username
和 password
字段。
这是一个使用 requests 的工作示例:
r = requests.post('http://example.com/api-token/'), data=
'username': username,
'password': password,
)
token = r.json()['token']
【讨论】:
仅供参考:“请注意,默认的 gain_auth_token 视图明确使用 JSON 请求和响应,而不是在您的设置中使用默认的渲染器和解析器类。如果您需要自定义版本的 gain_auth_token 视图,您可以通过覆盖获取AuthToken 视图类并在您的 url conf 中使用它来实现。”在django-rest-framework.org/api-guide/authentication/… @MariusSiuram 感谢您的提醒!【参考方案4】:按照文档顺序 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
【讨论】:
以上是关于使用 rest_framework.authtoken.views.obtain._auth_token 时出现 CSRF 错误的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)