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_secret、client_id和redirect_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




