繁体   English   中英

SwiftUI & Firebase:如何删除用户?

[英]SwiftUI & Firebase: How to delete a user?

在我的SettingsViewModel我有以下内容:

    class SettingsViewModel: ObservableObject {
    func deleteUser(){

        let userId = Auth.auth().currentUser!.uid

        Firestore.firestore().collection("users").document(userId).delete() { err in
            if let err = err {
                print("error: \(err)")
            } else {
                print("Deleted user in db users")
                Storage.storage().reference(forURL: "gs://myapp.appspot.com").child("avatar").child(userId).delete() { err in
                    if let err = err {
                        print("error: \(err)")
                    } else {
                        print("Deleted User image")
                        Auth.auth().currentUser!.delete { error in
                           if let error = error {
                               print("error deleting user - \(error)")
                           } else {
                                print("Account deleted")
                           }
                        }
                    }
                }
            }
        }
    }
    }

在我的设置视图中,我在一个按钮中调用 function,如下所示:

    @ObservedObject var settingsViewModel = SettingsViewModel()
    func logout() {
        session.logout()
    }

    Button(action: {
        self.showActionSheet = true
    }) {
        Text("Delete Account").foregroundColor(.white).padding()
    }.background(Color.red)
     .cornerRadius(10)
     .padding(.top, 35)
     .actionSheet(isPresented: self.$showActionSheet) {
     ActionSheet(title: Text("Delete"), message: Text("Are you sure you want to delete your account?"),
         buttons: [
              .default(Text("Yes, delete my account."), action: {
                 self.deleteUser()
                 self.session.logout()
                 self.showActionSheet.toggle()
              }),.cancel()
           ])
     }

这无法正常工作,因为它会删除帐户:

    Auth.auth().currentUser!.delete { error in
         if let error = error {
             print("error deleting user - \(error)")
         } else {
             print("Account deleted")
         }
     }

然后退出,留下其他数据,但如果我删除:

    Auth.auth().currentUser!.delete { error in
         if let error = error {
             print("error deleting user - \(error)")
         } else {
             print("Account deleted")
         }
     }

然后它会删除用户数据,但不会删除存储:

    Storage.storage().reference(forURL: "gs://myapp.appspot.com").child("avatar").child(userId).delete()

我试图让它流动,所以它删除用户数据,然后是图像,然后是身份验证数据,然后注销应用程序。 所有功能都有效,但将它们放在一起会导致问题。

这样做的推荐方法是:

  1. 编写一个 Cloud Function,当 Firebase Auth 中的用户帐户被删除时触发(参见user.onDelete()
  2. 在此 function 中,删除 Cloud Firestore、Cloud Storage 中所有用户的数据
  3. 通过调用user.delete()删除用户触发 function

您可能想查看删除用户数据扩展,它为您介绍了第 1 步和第 2 步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM