在React Native中使用授权标头
我试图在React Native中使用fetch
来从Product Hunt API中获取信息。 我已经获得适当的访问令牌,并已将其保存到状态,但似乎无法传递给GET请求的授权标头。
以下是我到目前为止:
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(); },
我对我的代码的期望如下:
- 首先,我将使用导入的API模块中的数据
fetch
访问令牌 - 之后,我将把
clientToken
属性设置为等于接收到的访问令牌。 - 然后,我将运行
getPosts
,它将返回包含Product Hunt中当前职位数组的响应。
我能够validation访问令牌正在接收,并且this.state
接收它作为其clientToken
属性。 我也能够validationgetPosts
正在运行。
我收到的错误如下:
我一直在努力的假设,我不知道在我的授权头正确传递访问令牌,但似乎无法弄清楚为什么。
使用授权标头的示例提取:
fetch('URL_GOES_HERE', { method: 'post', headers: { 'Authorization': 'Basic '+btoa('username:password'), 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'A=1&B=2' });
事实certificate,我错误地使用了fetch
方法。
fetch
需要两个参数:API的端点,以及一个可以包含主体和标题的可选对象。
我正在将目标物体包裹在第二个物体中,这并没有得到我想要的结果。
以下是它在高层上的外观:
fetch('API_ENDPOINT', OBJECT) .then(function(res) { return res.json(); }) .then(function(resJson) { return resJson; })
我的结构是这样的:
var obj = { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Origin': '', 'Host': 'api.producthunt.com' }, body: JSON.stringify({ 'client_id': '(API KEY)', 'client_secret': '(API SECRET)', 'grant_type': 'client_credentials' })