iOS SwiftUI应用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

