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

AngularFire使用Firebase本地模拟器时Firestore报permission denied错误

问题原因

错误日志已经说明请求没有路由到本地模拟器,而是尝试访问线上真实的FIREBASE_PROJECT_ID项目,自然不存在,所以返回权限拒绝,核心是模拟器配置格式错误和项目ID不匹配两个问题,按以下步骤排查即可解决:


解决方案

  1. 修正模拟器配置格式
    AngularFire 7+ 搭配 Firebase 9.x 时,三个模拟器的注入参数要求为[主机名, 端口号]的数组,不能带http://前缀,也不是完整URL。将app.module.ts中的providers部分替换为如下代码:
providers: [
  // Firebase
  {provide: USE_AUTH_EMULATOR, useValue: envFirebase.useEmulators ? ['localhost', 9099] : undefined},
  {provide: USE_FUNCTIONS_EMULATOR, useValue: envFirebase.useEmulators ? ['localhost', 5001] : undefined},
  {provide: USE_FIRESTORE_EMULATOR, useValue: envFirebase.useEmulators ? ['localhost', 8080] : undefined},
]
  1. 统一项目ID
    启动Firebase本地模拟器时使用的项目ID,必须和environment.ts中firebase.config.projectId的取值完全一致。
    启动模拟器时指定项目ID的命令:
firebase emulators:start --project=你的项目ID

也可以在项目根目录的.firebaserc文件中配置默认项目ID,避免每次启动都手动指定。

  1. 验证Firestore安全规则
    本地模拟器默认加载根目录下的firestore.rules文件,测试阶段可以先使用宽松规则验证连通性:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

确认写入功能正常后,再修改为符合业务要求的正式规则即可。

  1. 移除冗余配置(可选)
    AppModule构造函数中添加的experimentalForceLongPolling配置在新版Firebase模拟器中已经不需要,反而可能导致连接异常,可以先删除这行配置测试。

以上配置修改完成后,重启Angular开发服务和Firebase模拟器,再测试Firestore写入操作即可恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:51:02