【发布时间】:2017-07-14 21:01:20
【问题描述】:
构建 Django Rest 框架。当我使用“curl”使用有效令牌调用 API 时,它可以工作:
curl -viL -H "Authorization: Token 65c38dfe0c910b727197683aebdcc1c67c1b7aa3" http://127.0.0.1:8000/api/habit/
通过我的 javascript 调用的相同 API 调用失败,Django 将其视为匿名用户并出错。
fetchHabits: function() {
console.log('Token '+this.authToken.token);
fetch('http://127.0.0.1:8000/api/habit/?format=json',{
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Token '+this.authToken.token
}
})
.then(response => response.json())
.then(json => this.habits = json)
},
我已经证明发送和接收了正确的令牌。我假设因为 CURL 有效,所以 Django 代码正在工作,因此错误位于 Javascript 端的标头中。
有人可以帮忙吗?
【问题讨论】:
-
如果您使用像 Fiddler 这样的工具,您可以检查这两个请求并发现请求中的任何差异,以及响应中的任何差异。你得到什么实际错误? 401、403,我猜?
-
不,我得到了 500,因为 Django 将其视为匿名用户并抛出。昨天一整天我都认为这是一个 Django 问题,直到 CURL 第一次工作。所以现在我假设我错误地编写了 HEADER。
-
好的,我原以为框架会认为这是权限错误并返回与权限相关的代码。但也许它不够精明。我真的不知道Django。无论如何,就像我说的那样,你最好的起点是使用 Fiddler(或类似的)比较生成的 HTTP 请求并找出差异,看看你出现了什么。
标签: javascript curl django-rest-framework