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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:10:18