You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Google API客户端credentials.json文件获取及格式异常问题咨询

解决Google Calendar Node.js示例中credentials.json格式不符的问题

我之前也踩过这个坑!核心问题是你在API控制台创建的OAuth凭据类型不对——示例代码是针对桌面应用类型的凭据编写的,要是你选的是Web应用或其他类型,下载的JSON自然会缺少installed字段和对应的redirect_uris

正确获取符合要求的credentials.json步骤:

  • 打开Google API控制台的凭据页面,找到你的目标项目。
  • 点击「创建凭据」→「OAuth客户端ID」。
  • 在「应用类型」里选择桌面应用(Desktop app),随便填个名称(比如“Calendar Quickstart”),然后点击创建。
  • 弹出的窗口里点击「下载JSON」,这个文件就是示例代码需要的格式了——它会包含installed顶级字段,里面正好有client_secretclient_idredirect_uris(默认是["http://localhost"]这类本地回调地址)。
  • 把下载的文件重命名为credentials.json,放到你的Node.js项目根目录,和示例代码文件同级。

验证代码对应关系

你提供的示例代码里,这段就是读取并解析桌面应用凭据的逻辑:

// Load client secrets from a local file.
fs.readFile('credentials.json', (err, content) => {
  if (err) return console.log('Error loading client secret file:', err);
  // Authorize a client with credentials, then call the Google Calendar API.
  authorize(JSON.parse(content), listEvents);
});
function authorize(credentials, callback) {
  const {client_secret, client_id, redirect_uris} = credentials.installed;
  const oAuth2Client = new google.auth.OAuth2(
    client_id, client_secret, redirect_uris[0]);
  // Check if we have previously stored a token.
  fs.readFile(TOKEN_PATH, (err, token) => {
    if (err) return getAccessToken(oAuth2Client, callback);
    oAuth2Client.setCredentials(JSON.parse(token));
    callback(oAuth2Client);
  });
}

这里的credentials.installed就是对应桌面应用凭据JSON里的installed对象,所以只要用正确类型的凭据,这段代码就能正常读取所需字段。

另外,代码里的TOKEN_PATH默认一般是项目里的token.json,第一次运行程序时会自动引导你完成授权流程,生成这个令牌文件,之后就不用重复授权了。

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

火山引擎 最新活动