【发布时间】:2015-07-24 01:05:32
【问题描述】:
我正在尝试在 React Native 中使用 fetch 从 Product Hunt API 中获取信息。我已获得正确的访问令牌并将其保存到 State,但似乎无法在 GET 请求的 Authorization 标头中传递它。
这是我目前所拥有的:
var Products = React.createClass({
getInitialState: function() {
return {
clientToken: false,
loaded: false
}
},
componentWillMount: function () {
fetch(api.token.link, api.token.object)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
this.setState({
clientToken: responseData.access_token,
});
})
.then(() => {
this.getPosts();
})
.done();
},
getPosts: function() {
var obj = {
link: 'https://api.producthunt.com/v1/posts',
object: {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.state.clientToken,
'Host': 'api.producthunt.com'
}
}
}
fetch(api.posts.link, obj)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
})
.done();
},
我对代码的期望如下:
- 首先,我将
fetch一个访问令牌,其中包含来自我导入的 API 模块的数据 - 之后,我会将
this.state的clientToken属性设置为等于收到的访问令牌。 - 然后,我将运行
getPosts,它应返回包含 Product Hunt 的当前帖子数组的响应。
我能够验证正在接收访问令牌并且this.state 正在将其作为clientToken 属性接收。我还能够验证 getPosts 正在运行。
我收到的错误如下:
{"error":"unauthorized_oauth", "error_description":"请提供有效的访问令牌。有关如何授权 api 请求,请参阅我们的 api 文档。还请确保您需要正确的范围。例如 \" private public\" 用于访问私有端点。"}
我一直在假设我没有在授权标头中正确传递访问令牌,但似乎无法弄清楚原因。
【问题讨论】:
-
如this SO 中所述,标头应为小写(有些服务器尊重这一点,而另一些则不这样做。)我分享只是因为我被它咬了不知道我自己(并且浪费时间尝试调试问题。)不幸的是,这么多项目、示例和文章似乎并不尊重这一点。
-
@t.j.标题名称不区分大小写,这正是您链接的问题中接受的 + 最佳答案所说的内容。
-
5.5 年后,我像 OP 一样设置了一个 fetch 标头:
'Authorization': 'Bearer ' + myJWT,原来 myJWT 被双引号括起来了!Authorization: Bearer "yadda.yadda.yadda"在多次尝试解决方案后,我过滤了后端的双引号。
标签: javascript oauth-2.0 react-native fetch-api