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

Firebase Emulator调用Google Cloud Speech-to-Text API权限被拒绝如何解决

问题原因与修复方案

核心报错原因

  • 你设置的GCLOUD_PROJECT和GOOGLE_APPLICATION_CREDENTIALS环境变量仅作用于模拟器启动的父进程,模拟器内部运行的云函数触发器默认会使用Firebase CLI内置的默认测试项目ID(也就是错误中提到的563584335869)作为请求上下文,不会继承本地shell的环境变量,所以请求实际上是发送到了不存在的默认测试项目上,自然会提示API未启用。
  • 如果你没有在自己的真实谷歌云项目中提前启用Speech-to-Text API,即便配置了正确的上下文也会触发同类权限错误。

修复步骤

1. 确认真实项目已启用对应API

登录谷歌云控制台,在你的实际项目my-actual-glcloud-project-id中确认Speech-to-Text API已经启用,排除API未启用的问题。

2. 给云函数注入正确的运行环境变量

不要仅在启动模拟器的shell中设置环境变量,需要直接将配置注入到模拟器的云函数运行环境中,两种常用方案二选一即可:

  • 方案1:修改firebase.json配置,在模拟器节点下新增函数的环境变量配置,示例如下:
{
  "functions": {
    "source": "functions"
  },
  "emulators": {
    "functions": {
      "port": 5001,
      "env": {
        "GCLOUD_PROJECT": "my-actual-glcloud-project-id",
        "GOOGLE_APPLICATION_CREDENTIALS": "./path/to/service-account.json"
      }
    },
    "storage": {
      "port": 9199
    },
    "auth": {
      "port": 9099
    },
    "ui": {
      "enabled": true
    }
  }
}
  • 方案2:启动模拟器时直接用--env参数传递环境变量:
firebase emulators:start \
  --env GCLOUD_PROJECT=my-actual-glcloud-project-id \
  --env GOOGLE_APPLICATION_CREDENTIALS=./path/to/service-account.json

注意替换配置中的项目ID、服务账号文件路径为你自己的实际值,服务账号文件路径建议写绝对路径,或者相对于项目根目录的相对路径。另外启动模拟器时不要加--project demo-*类的参数,否则会强制使用测试demo项目上下文。

3. 显式指定Speech客户端的项目ID

如果在云函数中初始化Speech-to-Text客户端时没有显式传入项目ID,建议补充传入,避免客户端自动读取默认的测试项目ID,以下是Node.js示例:

const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient({
  projectId: 'my-actual-glcloud-project-id'
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:00