使用 Auth 创建用户并同时写入 Firestore

Sna*_*ake 6 java android firebase firebase-authentication google-cloud-firestore

我有一个场景,我需要使用 来创建用户Auth并将更多信息(例如业务名称和类型)添加到 Firestore 数据库。Firestore 作为事务/批处理操作,但仅适用于 Firestore。

有没有一种方法可以执行Auth诸如创建和 Firestore 数据插入之类的操作。两种操作都必须成功或失败。现在我将它们链接起来,但我会担心一个失败而另一个成功需要优雅地处理。

谢谢

Ale*_*amo 8

当您实施 Firebase 身份验证时,您可以使用addOnCompleteListeneroraddOnSuccessListener并实施isComplete()orisSuccessful()方法。在其中一种方法中,您需要在 Firestore 数据库中创建用户。换句话说,只有认证成功后,您才会创建用户。因此,如果isSuccessful()该方法之一下的所有操作都成功,或者没有应用任何操作。

这两种方法之间的区别在于,我们可以认为任务是complete指该任务所代表的工作完成时,无论其成功或失败。可能有错误,也可能没有错误,但我们需要检查一下。任务是successful指任务所代表的工作按预期完成且没有错误。

结论是,没有办法提供批量解决方案。这是因为有 2 个单独的操作。因此,为了能够在数据库中写入用户详细信息,您需要首先成功进行身份验证。如果您想要回滚,则在将用户详细信息写入数据库时​​需要再次使用 addOnCompleteListener。如果出现错误,只需让用户退出即可。没有事务/批处理操作可以处理您所描述的身份验证和数据库写入操作。

编辑:

既然您说您正在使用 Firebase 身份验证,那么您还可以使用用 Cloud Function 编写的函数来实现您的目标。您可以编写一个函数,该函数将在项目中每次发生某些情况时运行。这些“事情”之一就是创建用户。换句话说,您可以在每次创建新用户时执行您的逻辑。这是一个例子:

exports.updateUserCount = functions.auth.user().onCreate((user) => {
  //Do what you need to do
});
Run Code Online (Sandbox Code Playgroud)

此外,您可以对用户删除执行相同的操作,但使用onDelete()方法注册功能。

这将非常快,因为没有与用户设备的交互。请参阅有关Firebase 云功能的更多信息。