【问题标题】:SwiftUI & Firebase: How to delete a user?SwiftUI 和 Firebase:如何删除用户?
【发布时间】: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()

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

【问题讨论】:

    标签: swift firebase google-cloud-firestore swiftui


    【解决方案1】:

    推荐的方法是:

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-15
      • 2019-10-19
      • 2019-12-27
      • 1970-01-01
      • 2017-01-31
      • 2017-06-01
      • 2022-11-09
      • 2019-04-05
      • 2019-12-28
      相关资源
      最近更新 更多