当前位置: 首页 > 知识库问答 >
问题:

在 React 原生中使用带有 Fetch 的授权标头

端木狐若
2023-03-14

我正在尝试使用“反应原生”中的获取功能从产品搜索 API 中获取信息。我已获得正确的访问令牌并将其保存到 State,但似乎无法在 GET 请求的授权标头中传递它。

到目前为止,我有以下情况:

var Products = React.createClass({
  getInitialState: function() {
    return {
      clientToken: false,
      loaded: false
    }
  },
  componentWillMount: function () {
    fetch(api.token.link, api.token.object)
      .then((response) => response.html" target="_blank">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();
  },

我对代码的期望如下:

    < li >首先,我将从导入的API模块中< code >获取带有数据的访问令牌 < li >之后,我将< code>this.state的< code>clientToken属性设置为等于接收的访问令牌。 < li >然后,我将运行< code>getPosts,它将返回一个响应,其中包含来自产品搜索的一组当前帖子。

我能够验证访问令牌是否正在接收,以及 this.state 是否将其作为其客户端Token 属性接收。我还能够验证正在运行。

我收到的错误如下:

{“错误”:“unauthorized_oauth”、“error_description”:“请提供有效的访问令牌。请参阅我们的 API 文档,了解如何授权 API 请求。还要确保需要正确的作用域。例如,用于访问专用终结点的“专用公共”。

我一直在假设我没有以某种方式在我的授权标头中正确传递访问令牌,但似乎无法弄清楚确切的原因。

共有3个答案

申屠秦斩
2023-03-14

我也有同样的问题,我使用django-rest-knox作为认证令牌。事实证明,我的fetch方法看起来没有任何问题,如下所示:

...
    let headers = {"Content-Type": "application/json"};
    if (token) {
      headers["Authorization"] = `Token ${token}`;
    }
    return fetch("/api/instruments/", {headers,})
      .then(res => {
...

我正在跑。

对我来说,解决这个问题的方法是将WSGIPassAuthoration更改为wsgi.conf中的'On'

我在 AWS EC2 上部署了一个 Django 应用程序,并且我使用弹性豆茎来管理我的应用程序,因此在 django.config 中,我执行了以下操作:

container_commands:
  01wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
滑畅
2023-03-14

原来我不正确地使用了fetch方法。

fetch接受两个参数:API的endpoint,以及可以包含正文和标头的可选对象。

我将预期的对象包装在第二个对象中,这没有得到任何期望的结果。

下面是它在高层次上的样子:

    fetch('API_ENDPOINT', options)  
      .then(function(res) {
        return res.json();
       })
      .then(function(resJson) {
        return resJson;
       })

我的选项对象结构如下:

    var options = {  
      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'
      })
    }
轩辕弘雅
2023-03-14

具有授权标头的提取示例:

fetch('URL_GOES_HERE', { 
    method: 'post', 
    headers: new Headers({
        'Authorization': 'Basic '+btoa('username:password'), 
        'Content-Type': 'application/x-www-form-urlencoded'
    }), 
    body: 'A=1&B=2'
});
 类似资料:
  • 问题内容: 我正在尝试发送跨域域并添加自定义的“授权”标头。请参见下面的代码。 错误: XMLHttpRequest无法加载{url}。请求标头字段Access-Control-Allow-Headers不允许授权。 我也尝试过: 在ajax请求中。 可能是jquery-ajax框架阻止了跨域身份验证?我怎样才能解决这个问题? 更新: 顺便说一句:是否有一种更安全的方法将auth.key存储在客户

  • Auth/app-not-authorizederror只有在手机验证中使用设备,我可以存储电子邮件/密码验证的数据,在firebase react-native中测试手机验证,但不使用设备,我添加了SHA 1,我检查了包名,项目名,添加了google-services.json,我添加了react-native-app,react-native-auth。我不会把otp从Firebase带到我的

  • 我用传单在我的角。js地图应用程序。我的一个资源需要一个带有令牌的授权头。我正在使用传单实时插件(在这里找到:https://github.com/perliedman/leaflet-realtime)获取地图更新,因此需要能够在实时执行获取数据时指定我的头。 我首先尝试使用另一个库fetch-intercept(在这里找到:https://github.com/werk85/fetch-int

  • 我正在尝试将带有表单数据的POST请求从React前端发送到Go后端。 在后端,我尝试通过以下方式访问数据: 但是,我收到以下错误: 此外,fileHeader是。 我发现的唯一可能的解决方案是删除这篇文章中提到的标头,但在POST正文中编码授权令牌当然不是我解决此问题的首选方法。 由于已经有人问过这个问题,我不清楚这个问题:将标题设置为 导致同样的问题。 PS:React fetch似乎会自动生

  • 花了很多时间想弄清楚这一点,但没有成功。我正试着用cookie让csurf保护运行。目前,我已经尽可能地简化了下面的代码。我正在Express上运行从React到另一台服务器的提取请求。它给出了错误: “CORS策略阻止了在”http://localhost:3003/testlogin“从origin”http://localhost:3000“获取的访问:请求的资源上没有”access-con

  • 在我的第一个nodejs应用程序中实现授权时,我遇到了一个问题,该应用程序使用expressjs、sequelize和jsonwebtoken进行身份验证。在内部,我想禁止/允许不同用户的路由,我不想使用另一个包,如oauth2或为我处理授权的东西。 目前,我已经创建了一个jsonwebtoken,它的有效负载中包含权限角色: 否我想在“GET/user”这样的调用中检查是否允许经过身份验证的用户