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