django - 在 react app.js fetch 的响应中未获取令牌
问题描述
我正在链接 django 做出反应。
我正在尝试从 react app.js 使用 tokenAuthentication的 Django-rest-framework 端点http://127.0.0.1:8000/api/get-token获取令牌。我已经设置了 corsheaders 和 restframework 所有这些。当我通过命令行使用令牌点击端点时,它可以工作。现在我需要我的 react app.js 中的令牌。我收到状态为 200 的响应,但找不到令牌。由于我是新手,所以我不确定我是否遗漏了什么。//App.js
componentDidMount() {
try {
const data = {username: 'user', password: 'password'};
fetch('http://127.0.0.1:8000/api/get-token/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
}).then(function(response) {
console.log(response.token);
})
} catch (e) {
console.log(e);
}
}
如果您需要更多信息,请告诉我
我在我的 settings.py 中尝试了 TokenAuthentication 和 BasicAuthentication
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
...
}
解决方案
使用 fetch 时,您首先必须使用.response.json()
.
这是您的代码示例,在获取之后有一个额外then
的,以返回一个包含您的数据的新承诺(用 JSON 解析):
componentDidMount() {
try {
const data = {username: 'user', password: 'password'};
fetch('http://127.0.0.1:8000/api/get-token/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
}).then(function(response) {
return response.json();
}).then(function(data) {
console.log(data.token);
})
} catch (e) {
console.log(e);
}
}
注意:如果您从服务器收到的数据不是 JSON,您应该使用response.text()
将响应解析为字符串。
推荐阅读
- c# - 添加 webdriver 等待子元素搜索 - 以避免 ElementClickInterceptedException
- sql-server - Azure 数据质量分析真实世界示例
- android - react-native run-android 崩溃了
- clojure - 为什么我的代码会生成一个空列表列表?
- sed - Sed - 如何匹配正则表达式组并使用它来替换同一行中的所有其他匹配项?
- jupyter-notebook - 在 jupyter notebook 中运行单元格时出现此错误:UsageError: Cell magic `%%execute_cell` not found.?
- javascript - 使用滚动仅在页面上播放多个视频
- java - Java测试是否有某种“隐藏的@Ignore”
- python-3.x - Rest框架的外键关系——Django
- sql - SQL Server 中除以零异常