Firebase - 创建一个临时用户,直到用户注册

Aks*_*ain 6 firebase firebase-authentication firebase-admin

我有一个用例,用户 A 可以说用户 B 从用户 A 那里借了一些钱,类似于 Splitwise 之类的应用程序。

我正在使用 firestore 来存储数据。在这种特殊情况下,我会将其作为文档存储在“交易”集合中,该集合将具有以下字段:

数量:20
fromUser:用户 A 的
uid toUser:用户 B 的 uid

这里的问题是用户 B 尚不存在,因此用户 B 没有 uid。我想要做的是为用户 B 创建一个临时用户,其电子邮件地址将生成一个 uid。稍后当用户 B 在应用程序上注册时,同一个用户将升级为用户 B 使用的任何身份验证提供程序的永久用户。

在搜索时,我遇到了 - https://www.freecodecamp.org/news/heres-what-i-wish-i-knew-before-i-started-using-firebase-9110d393e193/

其中提到这可以通过现在折旧的 firebase 邀请来实现。那么,现在还有其他方法可以实现这种行为吗?

Chr*_*ert 7

Firebase 支持为此类场景创建匿名用户帐户。

使用 Firebase 匿名进行身份验证

您可以使用 Firebase 身份验证创建并使用临时匿名帐户来通过 Firebase 进行身份验证。这些临时匿名帐户可用于允许尚未注册您的应用程序的用户使用受安全规则保护的数据。如果匿名用户决定注册您的应用程序,您可以将他们的登录凭据链接到匿名帐户,以便他们可以在将来的会话中继续使用受保护的数据。


第二个用户的电子邮件地址已知

如果您已有尚未注册的用户(用户 B)的电子邮件地址,则可以使用 Firebase Admin SDK 创建他们的帐户。

请参阅创建用户

然后,可以通过调用为电子邮件链接身份验证配置新的用户 B电子邮件地址。firebase.auth().sendSignInLinkToEmail(email, actionCodeSettings)

由于用户B帐户创建是由用户A发起的,因此您将无法使用本地存储保存用户B的电子邮件以通过电子邮件链接完成登录。但是,这不是问题,因为如文档示例所示,您可能会提示用户输入他们的电子邮件地址。

if (firebase.auth().isSignInWithEmailLink(window.location.href)) {
  // Additional state parameters can also be passed via URL.
  // This can be used to continue the user's intended action before triggering
  // the sign-in operation.
  email = window.prompt('Please provide your email for confirmation');
  
  // The client SDK will parse the code from the link for you.
  firebase.auth().signInWithEmailLink(email, window.location.href)

  ...
Run Code Online (Sandbox Code Playgroud)

既然用户 B已使用电子邮件链接成功登录,则可以遵循标准流程来链接多个身份验证提供商


Ron*_*ton 1

服务器端(又名 Node.js)管理 SDK 允许您以编程方式创建用户。您需要某种方法将新创建的用户 UID 固定/粘贴到 userB。电子邮件地址似乎是最简单的方法。因此,UserA 需要指定 userB 的电子邮件地址,然后您处理该服务器端 Admin SDK。

当用户 B 使用其电子邮件地址登录时,Firebase 身份验证将检测具有用户 B 的电子邮件地址的现有帐户,并抛出错误,您可以使用该错误来合并用户 B 的帐户数据。