如何分别从Firebase Auth和Realtime Database自动删除用户和用户的数据?

时间:2016-11-13 19:25:53

标签: swift firebase firebase-realtime-database firebase-authentication firebase-storage

一些背景

创建用户帐户时,我在序列1>中使用回调链进行3项操作。 2> 3。

  1. 在Firebase Auth中创建用户(使用createUser(withEmail ...)的标准方式)

  2. 我将用户的个人资料照片上传到Firebase存储并捕获返回的downloadUrl以便在步骤3中使用

  3. 我将用户的其他信息(包括步骤2中的downloadUrl)存储在实时数据库中的节点中(由$userid键入)

  4. 现在问题

    我提供了一个名为'删除帐户'这应该使用户能够删除一切。也就是说,清除实时数据库中的所有数据,在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等的计数器。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

因此,主要问题是如果您尝试删除的数据仅被部分删除,该怎么办。

我认为你应该考虑一种方法,它可以帮助你在出现问题时恢复它。

我现在不在我的电脑上,但我建议您尝试下载要删除的数据,只有在成功删除本地副本的情况下,否则您应该能够轻松恢复。

编辑:如果我们谈论的是大量存储而不是本地副本,您可以在云上进行。

因此,您首先复制此数据,然后将其删除,然后删除数据库数据(也先前已复制),然后您可以删除用户帐户,最后可以删除该副本。