如何解决Google Speech-To-Text PERMISSION_DENIED权限报错问题
问题根因
你本地环境的GOOGLE_APPLICATION_CREDENTIALS环境变量未正确生效,程序读取了你本地Google Cloud SDK登录的个人用户凭证,而Google Speech API不支持个人终端用户凭证调用,才触发权限报错。服务器上能正常运行是因为服务端环境的服务账号凭证配置正确加载了。
解决方案
- 第一步:修正启动脚本的环境变量设置逻辑
你当前脚本中的set是Windows专属的环境变量设置命令,如果你本地使用的是macOS/Linux系统,该命令不会生效,环境变量不会注入到进程中。
方案1(推荐,跨系统兼容):
先安装跨系统环境变量工具cross-env
再修改package.json的scripts配置,注意路径带空格需要用引号包裹:npm install cross-env --save-dev
方案2(无需依赖,适配对应系统):"scripts": { "start": "cross-env GOOGLE_APPLICATION_CREDENTIALS=\"/My Path/my.json\" node app.js" }
如果你本地是macOS/Linux系统,直接删除set命令即可:
如果你本地是Windows系统,保持"scripts": { "start": "GOOGLE_APPLICATION_CREDENTIALS=\"/My Path/my.json\" node app.js" }set命令即可,注意路径分隔符不要使用单反斜杠,避免转义导致路径识别错误。 - 第二步:验证环境变量加载结果
在app.js入口文件最顶部加入日志打印,确认路径正确:
console.log('凭证路径:', process.env.GOOGLE_APPLICATION_CREDENTIALS)
启动项目后检查输出的路径是否和你本地服务账号json文件的绝对路径完全一致,同时确认该文件对当前运行程序的用户有可读权限。
- 第三步:排查本地gcloud配置冲突
如果以上配置都正确依然报错,执行以下命令清除本地gcloud的默认项目配额配置,避免优先级覆盖:
gcloud config unset auth/quota_project
配置完成后重启项目即可正常调用接口。
内容的提问来源于stack exchange,提问作者Bruce.Kwon
相关产品推荐
相关产品推荐

