Flutter写入Firestore遇cloud_firestore/permission-denied权限拒绝错误
以下是针对你遇到的FirebaseException ([cloud_firestore/permission-denied])错误的排查步骤:
确认规则已发布生效
规则修改后必须点击Firestore控制台的「发布」按钮,未发布的草稿规则不会生效。前往Firebase控制台的Firestore规则页面,检查当前生效的规则是否与你配置的一致。核对Firebase项目关联正确性
确保代码中使用的Firebase配置文件(Android的google-services.json、iOS的GoogleService-Info.plist)对应的项目ID,与你配置规则的Firebase项目ID完全一致,避免关联到错误项目导致规则不匹配。验证用户认证状态
你的代码中使用了cred.user!.uid作为文档ID,需确认用户已成功完成认证流程,cred.user不为null。可以在写入操作前添加日志打印cred.user的状态,排除因认证未完成导致的间接问题。检查Firestore数据库区域配置
确认代码中Firestore的数据库区域与控制台设置的区域一致。若控制台设置了特定区域(如asia-east2),需在初始化Firestore时指定对应区域:FirebaseFirestore.instanceFor(app: Firebase.app(), region: 'asia-east2');避免因区域不匹配导致规则无法应用。
清除客户端缓存并重启应用
客户端可能缓存了旧的规则配置,尝试清除应用缓存或卸载重装应用后,重新测试写入操作。排查规则语法与优先级
检查你配置的规则是否存在语法错误,虽然你使用了通配规则match /{document=**},但需确保没有其他更具体的match规则出现在该规则之前(规则匹配遵循「最具体优先」原则),不过你的规则结构是全局通配,这种情况概率较低。测试极简写入操作
替换原有写入代码,用极简的测试代码验证:await FirebaseFirestore.instance.collection('users').doc('test-doc').set({'content': 'test'});排除因文档ID、数据字段内容等特殊情况导致的错误。
内容的提问来源于stack exchange,提问作者CoreSK

