一些背景
创建用户帐户时,我在序列1>中使用回调链进行3项操作。 2> 3。
在Firebase Auth中创建用户(使用createUser(withEmail ...)
的标准方式)
我将用户的个人资料照片上传到Firebase存储并捕获返回的downloadUrl
以便在步骤3中使用
我将用户的其他信息(包括步骤2中的downloadUrl
)存储在实时数据库中的节点中(由$userid
键入)
现在问题
我提供了一个名为'删除帐户'这应该使用户能够删除一切。也就是说,清除实时数据库中的所有数据,在Firebase存储中清除其个人资料图片,最后从Auth中删除他们的帐户。 重要的是,即使一个操作失败,所有这些操作都应该成功或被取消。
我已经浏览了大约10页的S / O问题&答案,有1 unanswered question喜欢这个(它询问了帐户创建过程......我想这个问题的答案可以很容易地在这里进行调整。)
我尝试了什么?
目前,我使用回调链接如下:
// start by atomically deleting all the user data from the Realtime Database using the fanout system.
- get all appropriate locations and save in fanout dictionary
- update all these locations to nil // atomic goodness :)
-callback:
-on failure:
- just return // no worries, nothing has changed yet :/
-on success:
// proceed to delete user files on firebase storage
- delete path $userid on firebase storage
-callback:
-on failure: // this is bad, no idea what to do :(
-on success:
// proceed to delete account from Auth
- delete user account from Auth
-callback:
-on failure: // this is terrible, also, it could happen often b/c firebase does ask for re-authentication sometimes :(
-on success: // thank goodness! I have an authListener somewhere ready to show the 'signInViewController' :)
如何以原子方式处理此类多系统(Auth,Storage,RealtimeDB)操作?我已经查看了事务,但无法看到它们如何适应这种情况 - 文档只显示它们用于增加RealtimeDB中的likes / stars等的计数器。
非常感谢任何帮助。
答案 0 :(得分:0)
因此,主要问题是如果您尝试删除的数据仅被部分删除,该怎么办。
我认为你应该考虑一种方法,它可以帮助你在出现问题时恢复它。
我现在不在我的电脑上,但我建议您尝试下载要删除的数据,只有在成功删除本地副本的情况下,否则您应该能够轻松恢复。
编辑:如果我们谈论的是大量存储而不是本地副本,您可以在云上进行。
因此,您首先复制此数据,然后将其删除,然后删除数据库数据(也先前已复制),然后您可以删除用户帐户,最后可以删除该副本。