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

iOS SwiftUI应用Firestore读写权限不足问题求助

Firestore权限不足问题排查(同时使用Auth模拟器与真实Firestore)

问题背景

SwiftUI开发iOS应用时,Firestore读写持续返回「权限不足」错误。已将Firestore规则设置为完全开放,Firestore模拟器内可正常读写,但真实项目中操作失败。当前使用Firebase Auth模拟器进行身份验证,怀疑是否存在Auth模拟器与真实Firestore的兼容性冲突。

当前配置

Firestore规则

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

写入Firestore代码

class MapViewModel: ObservableObject {
  func fetchData() {
      let db = Firestore.firestore()
      db.document("another/pleaseWork").setData([
          "name": "Working Man",
          "age": 18,
      ])
  }
}

关键错误日志

日志中明确显示写入操作被拒绝:

10.28.1 - [FirebaseFirestore][I-FST000001] Write at another/pleaseWork failed: Missing or insufficient permissions.

同时日志表明当前用户已持有有效Auth token,但写入仍被拒绝。

解决方案

  • 单独配置Auth模拟器,避免影响Firestore
    若仅启用Auth模拟器,需确保Firestore不关联模拟器配置。Firebase模拟器生成的Auth token无法被真实Firestore服务识别,会导致权限验证失败。修改初始化代码:

    // 仅为Auth启用模拟器
    Auth.auth().useEmulator(withHost: "localhost", port: 9099)
    // Firestore保持默认初始化,使用真实服务
    let db = Firestore.firestore()
    
  • 确认Firestore规则已发布生效
    登录Firebase控制台,进入「Firestore数据库」→「规则」页面,确认已点击「发布」按钮,当前生效的规则为你设置的完全开放版本。未发布的规则仅在模拟器内生效,真实服务不会使用。

  • 验证应用配置文件正确性
    检查项目中的GoogleService-Info.plist是否属于当前操作的Firebase项目,避免因配置文件错误导致访问了规则不匹配的Firestore实例。

  • 临时关闭Auth模拟器测试
    注释掉Auth模拟器的配置代码,使用真实Auth流程(如匿名登录)测试Firestore写入。若操作成功,可确认是Auth模拟器与真实Firestore的兼容性问题。

  • 查看Firebase控制台权限日志
    在Firebase控制台「Firestore数据库」→「监控」→「规则」页面,查看详细的权限拒绝记录,其中会包含请求的用户信息、规则匹配结果等,可精准定位问题原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:07:33