SwiftUI 和 Firebase:如何删除用户?

Posted

技术标签:

【中文标题】SwiftUI 和 Firebase:如何删除用户?【英文标题】:SwiftUI & Firebase: How to delete a user? 【发布时间】:2020-06-08 15:57:26 【问题描述】:

在我的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")
                           
                        
                    
                
            
        
    
    

在我的设置视图中,我在按钮中调用函数,如下所示:

    @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】:

推荐的方法是:

    编写一个云函数,在 Firebase 身份验证中删除用户帐户时触发(请参阅 user.onDelete()) 在该函数中,删除Cloud Firestore、Cloud Storage中的所有用户数据 调用user.delete()删除用户触发功能

您可能想查看Delete User Data Extension,它为您介绍了第 1 步和第 2 步。

【讨论】:

以上是关于SwiftUI 和 Firebase:如何删除用户?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 SwiftUI 从 Firebase / Firestore 中删除文档

SwiftUI 和 Firebase:当前用户是不是持续存在?

只有在 SwiftUI 和 Firebase 中完成循环中的异步调用时,如何才能返回函数?

如何在 SwiftUI 中将 Firebase 结果转换为 List

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?

致命错误:索引超出范围,同时在 SwiftUI 的列表中从 Firebase 中删除项目