You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Intuit-Oauth Node库调用API时如何正确传递access_token?

问题原因

你当前的报错来自两个核心逻辑错误:

  1. /callback 接口中 createToken 是异步Promise操作,你没有等待该操作完成就执行了跳转,导致前端跳转后调用/getCompanyInfo时,access_token还未完成赋值,仍然是初始的null值。
  2. 你手动构造的Authorization请求头格式不符合要求,头字段的值应为Bearer <token>的字符串格式,你写的嵌套对象结构无法被服务端正确识别。

另外你使用的intuit-oauth SDK本身会自动存储已获取的token,无需手动提取后再传参,手动传参反而容易出现格式错误。

修正方案

1. 调整/callback接口的异步逻辑

将跳转逻辑移入createToken的成功回调中,保证token处理完成后再执行跳转:

app.get("/callback", function (req, res) {
  console.log('it got here')
  oauthClient
    .createToken(req.url)
    .then(function (authResponse) {
      oauth2_token_json = JSON.stringify(authResponse.getJson(), null, 2);
      // token已自动存储在oauthClient实例中,无需手动提取赋值
      res.redirect("http://localhost:3000/companyInfo" );
    })
    .catch(function (e) {
      console.error(e);
      res.status(500).send("授权失败:" + e.message);
    });
});

2. 简化/getCompanyInfo接口

移除手动配置的授权头,SDK的makeApiCall方法会自动拼接符合要求的授权信息:

app.get("/getCompanyInfo", (req, res) => {
  // 增加授权状态校验,避免未授权访问时报错
  if(!oauthClient || !oauthClient.isTokenValid()) {
    return res.status(401).send("未授权,请先完成授权流程");
  }
  let companyID = oauthClient.getToken().realmId;
  let url = oauthClient.environment == "sandbox" ? OAuthClient.environment.sandbox : OAuthClient.environment.production;

  oauthClient
    .makeApiCall({
      url: url + "v3/company/" + companyID + "/companyinfo/" + companyID
    })
    .then(function (authResponse) {
      console.log("API调用响应为:" + JSON.stringify(authResponse));
      res.send(JSON.parse(authResponse.text()));
    })
    .catch(function (e) {
      console.error(e);
      res.status(500).send("接口调用失败:" + e.message);
    });
});

如果你确实需要手动传递授权头,正确的格式如下:

headers:{
  'Authorization': 'Bearer ' + access_token
}

内容的提问来源于stack exchange,提问作者Josh Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:07