【问题标题】:How do you store user information in firestore if they don't have an account?如果他们没有帐户,您如何将用户信息存储在 Firestore 中?
【发布时间】:2019-09-06 02:39:50
【问题描述】:

我正在尝试使用 firebase auth 和 firestore 创建一个应用程序,可以通过电子邮件邀请新用户参与项目。问题是,我不知道在他们拥有 uid 之前存储临时用户项目权限的最佳方式。我希望通过电子邮件收到邀请的用户在打开发送给他们的链接后能够访问该项目。

我尝试了两种不同的方法

为项目中的每个用户都有一个子集合文档

/project/{projectId}/users/{userId}

当邀请新用户时,userId 被设置为他们的电子邮件,具有在创建新用户时触发的云功能以向用户发送邀请电子邮件。用户打开链接后,它删除了他们的用户文档,并运行了一个云函数,该函数创建了一个新的文档,其中包含用户 ID,因为他们在通过身份验证后拥有一次。

这可行,但留下了 10 秒的时间,用户无法与项目交互,因为用于制作新用户文档的云功能正在运行。而且这似乎是一种不好的方法。

拥有一个包含所有用户信息的文档

/project/{projectId}/users/users

users:{
  roles: {
    users_id: 'admin',
    new_user_email: 'admin',
  }
}

这个我无法开始工作,因为 firestore 不允许您创建一个带有句点的密钥,但如果有办法解决这个问题,它也可以工作。我还设置了 Firestore 安全规则,因此他们只能编辑密钥所在的字段 uid 或他们的电子邮件(如果他们不是编辑/管理员)。

【问题讨论】:

    标签: firebase-authentication google-cloud-firestore


    【解决方案1】:

    考虑首先在 Firebase 身份验证中创建一个 anonymous account,这不需要用户输入。它将收到一个 UID,您可以使用它来存储该帐户的数据。然后,注册或登录成功后即可convert that account to a normal account

    由于您没有说明您使用的是哪个移动平台,因此我将您链接到网络文档,但每个平台的过程通常相同。

    【讨论】:

    • 完成这项工作的最佳方法是什么?我将使用新用户创建一个子集合,运行一个云功能来检查是否存在具有给定电子邮件的用户,否则会创建一个具有给定电子邮件的新用户?
    • 我不确定你在问什么。您刚才描述的问题听起来与您提出的问题不同。
    • 太棒了!这正是我一直在寻找的。简单且防弹。
    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2021-12-23
    • 2023-02-22
    • 2020-08-10
    相关资源
    最近更新 更多