Swift 如何自动删除用户和用户';s数据分别来自Firebase Auth和实时数据库?

Swift 如何自动删除用户和用户';s数据分别来自Firebase Auth和实时数据库?,swift,firebase,firebase-realtime-database,firebase-authentication,firebase-storage,Swift,Firebase,Firebase Realtime Database,Firebase Authentication,Firebase Storage,一些背景 创建用户帐户时,我使用回调链接按顺序1>2>3执行3项操作 在Firebase Auth中创建用户(使用createUser(带电子邮件…)的标准方式) 我将用户的个人资料图片上传到Firebase存储,并捕获返回的downloadUrl,以便在步骤3中使用 我将用户的其他信息(包括步骤2中的下载URL)存储在实时数据库的节点中(由$userid键入) 现在问题解决了 我提供了一个名为“删除帐户”的按钮,该按钮应允许用户删除所有内容。也就是说,清除他们在实时数据库中的所有数据,清除他们

一些背景

创建用户帐户时,我使用回调链接按顺序1>2>3执行3项操作

  • 在Firebase Auth中创建用户(使用
    createUser(带电子邮件…
    )的标准方式)

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

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

  • 现在问题解决了

    我提供了一个名为“删除帐户”的按钮,该按钮应允许用户删除所有内容。也就是说,清除他们在实时数据库中的所有数据,清除他们在Firebase存储中的个人资料图片,最后从Auth中删除他们的帐户。重要的是,所有这些操作都应该成功,或者即使其中一个操作失败也应该取消

    我已经阅读了约10页的S/O问题和答案,其中有1页是这样的(它询问了有关帐户创建过程的问题……我想这个问题的答案可以很容易地在这里进行修改。)

    我试过什么?

    目前,我使用回调链接,如下所示:

    // 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' :)
    
    如何以原子方式处理这种多系统(身份验证、存储、实时数据库)操作?我已经查看了事务,但看不出它们如何适应这种情况-文档只显示它们在RealtimeDB中用于增加喜欢/明星等的计数器


    非常感谢您的帮助。

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

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

    我现在不在我的计算机上,但我建议您尝试下载要删除的数据,并且只有成功删除本地副本,否则您应该能够轻松恢复它

    编辑:如果我们谈论的是大量的存储,而不是本地拷贝,那么你可以在云端制作

    因此,首先复制此数据,然后删除它,然后删除数据库数据(以前也复制过),然后可以删除用户帐户,最后可以删除副本