Swift中Firebase Auth删除后无法删除Firestore数据的权限问题
问题解决:Firebase Auth删除后无法删除Firestore数据(权限不足)
问题原因
你的代码逻辑是先删除Firebase Auth用户,再删除对应的Firestore文档。但Auth用户删除后,当前请求的request.auth会变为null,而你的Firestore规则要求request.auth.uid == resource.data.userId,此时这个条件无法满足,所以触发「Missing or insufficient permissions」错误。
解决方案
方案1:调整执行顺序(推荐,安全)
先删除Firestore文档,成功后再删除Auth用户,这样执行Firestore删除操作时,用户仍处于登录状态,request.auth有效,规则条件可通过:
func deleteUser() { guard let uid = Auth.auth().currentUser?.uid else { return } // 先删Firestore数据 self.db.collection("users").document(uid).delete { firestoreError in if let firestoreError = firestoreError { print("删除Firestore数据失败:\(firestoreError.localizedDescription)") return } print("Firestore数据删除成功") // 再删Auth用户 Auth.auth().currentUser?.delete { authError in if let authError = authError { print("删除用户认证数据失败:\(authError.localizedDescription)") } else { print("用户认证数据删除成功") } } } }
方案2:优化Firestore规则(更精准匹配)
你的代码中用Auth的uid作为Firestore文档ID,规则可以直接通过文档ID和认证UID匹配,避免依赖resource.data.userId字段的潜在问题,同时保证权限安全:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{uid} { allow read: if true; allow write, delete: if request.auth.uid == uid; } } }
额外提醒
不要在生产环境中临时放宽Firestore规则(比如直接允许无认证删除),这会带来数据泄露或恶意删除的风险,始终保证操作在用户认证状态有效时执行。
内容的提问来源于stack exchange,提问作者Putyourz
相关产品推荐
相关产品推荐

