当前位置: 首页 > 知识库问答 >
问题:

我们如何让一个用户使用Firebase/Firestore注册另一个用户?

汪晨
2023-03-14

我知道可以使用以下代码通过电子邮件和密码注册用户:

FirebaseAuth.instance.createUserWithEmailAndPassword(
          email: email,
          password: password;)

那很好。我还可以在Firestore中添加文档和收藏:

Future<void> getUserDoc() {
  // Initiate an auth instance
  final FirebaseAuth _auth = FirebaseAuth.instance;
  // Initiate a firebase firestore instance
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;
  // Create a current user object
  User user = _auth.currentUser!;
  // Create a document reference based on the 'users'
  DocumentReference ref = _firestore.collection('users').doc(user.uid);

  // Return a collection that sets/updates the following data
  // based on the user.uid
  return ref.set({
    'UID': user.uid,
    'Email': user.email,
    'CreatedUserAt': user.metadata.creationTime,
    'LastSignInAt': user.metadata.lastSignInTime,
    'EmailVerified': user.emailVerified,
  });
}

我需要的是,现在登录的用户-例如一个企业,可以注册他们的客户端。他们的客户将在电子邮件中收到一个确认链接,然后他们就会注册该平台。然而,棘手的是,当这些客户登录时,应该通过商业帐户将他们添加到注册他们的企业中。我真的被这个逻辑在Firestore中如何工作的这一部分卡住了。

共有1个答案

奚英朗
2023-03-14

在我的理解中,拥有商业帐户的用户可以通过电子邮件邀请客户,当客户使用链接注册时,你需要将该客户添加到该业务下。您可以使用云功能邀请客户以及邀请人的商业帐户ID,如下所示:

exports.inviteClient = functions.https.onCall((data, context) => {
  // UID of user inviting client (or the business ID)
  const { uid } = context.auth; 

  // Add data in a database that maps user email with business ID
  // When user signs up, you can refer to this data to find who invited user

  // Send email link to sign up user

  return; 
});

用户注册后,您可以读取邀请用户的企业ID,并将其添加到用户集合中。我建议在云函数中运行此逻辑,这样用户就不能从客户端更改它。或者如果您也将使用火力恢复来存储映射,那么您可以使用安全规则来验证邀请者ID。

另一种方法可能是在邀请客户端函数本身中创建用户并添加包含业务ID的自定义声明。

如果您不想使用云功能,则可以在邀请某人后立即添加包含业务ID的用户文档,并使用安全规则确保用户无法更改其邀请者的ID。但是,您需要云功能/服务器来为用户生成登录链接并发送电子邮件。

 类似资料:
  • 从firebase_auth包调用的函数是createUserWithEmailAndPassword,我希望这个注册的用户在Firebase数据库中。

  • 我正在以非特权用户身份登录另一台计算机,我想让ansible为用户bob启用系统用户服务。 如果没有anable,解决方案将是后跟 然而,对于anable,有两个问题: 如果已经以另一个非特权用户(anable)的身份登录,较新版本的anable将拒绝成为非特权用户bob。 即使这有效,dbus也不会启动,systemctl也无法与systemd对话(如果我理解正确的话)。 一个可怕的解决方法是执

  • 我正在编写一个oauth2提供程序,不确定如何实现客户端注册。oauth2规范没有涵盖这方面: 客户端向授权服务器注册的方法超出了本规范的范围,但通常涉及终端用户与HTML注册表单的交互。 此外,文档对数据模型有以下说明: 通常的做法是将每个客户端与一个现有用户链接起来。无论是否将客户端和用户关联,都要确保能够保护自己免受恶意客户端的攻击。 null

  • GitHub的文档描述了对组织的不同访问级别,但我无法找到如何实际更改用户对组织的访问级别。 如何使组织成员成为管理员?

  • 我正在尝试创建一个应用程序,我必须注册用户,我正在使用Firebase进行注册,一旦我将所有数据放入register,然后进入Firebase数据库,我发现我自己并不是在测试模式下创建数据库的注册用户。你能解释一下我可能做错了什么吗? 注册用户代码: 我正在使用实时数据库 规则Firebase: