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



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

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中的工作原理。

根据我的理解,拥有业务帐户的用户可以通过电子邮件邀请客户,当客户使用链接注册时,您需要将该客户添加到此业务下。您可以使用云功能邀请客户,并附上邀请人的商业账户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,并将其添加到用户集合中。我建议在Cloud函数中运行此逻辑,这样用户就无法从客户端更改它。或者,如果您也将使用Firestore来存储映射,那么您可以使用安全规则来验证邀请方ID。


另一种方法可以是在inviteClient函数本身中创建一个用户,并添加一个包含业务ID的自定义声明。


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

最新更新