Node.js对接Google Sheets API授权后跳转连接拒绝报错问题
Google Sheets API Node.js OAuth授权跳转后获取不到授权码问题排查
最快临时解决方式(无需修改现有配置即可跑通)
你授权完成后浏览器跳转的报错页面,本质是本地8080端口没有服务监听导致的,Google已经把完整授权码放在了跳转后的URL里,直接按如下操作即可完成流程:
- 查看浏览器地址栏的完整URL,提取
code=参数的完整值:即为4/开头的长串内容,注意截掉后面附带的&scope、&authuser等其他参数,不要多复制无关内容。 - 回到正在等待输入的Node.js控制台,粘贴刚才提取的授权码后按回车,即可正常完成token换取流程,不需要等待本地页面能正常访问。
问题根因
- 你在Google Cloud后台配置的OAuth凭证属于Web应用类型,对应的重定向URI
http://localhost:8080设计用途是让本地Node.js服务在该端口监听,自动接收Google跳转携带的授权码完成换取逻辑。 - 当前你的Node.js进程没有在8080端口启动对应的回调接收服务,因此浏览器访问该地址时会因无服务监听报
ERR_CONNECTION_REFUSED,这属于正常现象,并非授权失败。 - 你参考的官方快速入门代码默认适配「桌面应用类凭证的手动复制授权码」模式,本身没有内置启动本地8080端口服务的逻辑,和你当前使用的Web类凭证配置不匹配,才导致控制台一直处于等待接收状态。
- 你修改credentials读取逻辑的操作是正确的:Web应用类OAuth凭证本身不存在顶层
installed字段,直接读取顶层对象的配置项不存在问题。
长期优化可选方案
方案1:适配自动回调流程(无需手动复制code)
- 确认OAuth2客户端初始化时配置的
redirectURI,和Google Cloud后台、credentials.json中记录的redirect_uris完全一致,均为http://localhost:8080。 - 在你的Node.js代码中补充本地回调服务逻辑:用Node.js内置
http模块或Express启动服务监听8080端口,注册回调路由接收URL中的code参数,调用oauth2Client.getToken(code)自动换取访问token,即可无需手动输入完成授权。 - 启动前提前排查8080端口是否被其他进程占用,避免服务启动失败导致再次出现连接拒绝的问题。
方案2:切换为桌面应用凭证适配纯本地调试场景
如果后续仅做本地调试、不需要上线Web端OAuth接入,可以直接在Google Cloud后台新建桌面应用类型的OAuth凭证,这种凭证默认适配手动复制code的模式,授权后Google会直接在浏览器页面展示完整授权码,无需跳转本地地址,不会出现连接拒绝的问题,调试成本更低。
内容的提问来源于stack exchange,提问作者William Tuominiemi
相关产品推荐
相关产品推荐

