假设我有一个名为people
的集合,并且每个文档的属性名称均为phone_number
。
当然,我可以允许用户注册,并且如果他的电话号码存在,我可以认为他已通过验证。但是,如果用户在我之前提到的任何文档中都没有电话号码,那么我不想让他从头开始注册。
我如何告诉Firebase仅在文档中存在其电话号码的情况下才允许用户注册?在另一个后端(例如nest)中,我将创建一个管道来简单地检查请求中给定的电话号码是否存在。
答案 0 :(得分:0)
如果我正确理解您的要求,则只需通过Admin SDK进行查询,就可以检查您的收藏夹中是否有与此phone_number对应的人员文档。
因此,如果我假设您将使用HTTPS Cloud Function,那么以下几行应该可以解决问题。使其易于适应其他Cloud Function触发器应该很容易。
exports.registerUser = functions.https.onRequest((req, res) => {
const phone_number = req.body.phone_number;
const peopleCollecRef = admin.firestore().collection('people');
peopleCollecRef
.where('phone_number', '==', phone_number)
.get()
.then(querySnapshot => {
if (querySnapshot.size === 1) {
return admin.auth().createUser({
email: req.body.email,
emailVerified: false,
phoneNumber: phone_number,
password: '....'
});
} else {
throw new Error('No user (or more than one user) with corresponding phone number ');
}
})
.then(userRecord => {
res.send({ result: 'user created with id: ' + userRecord.uid }); //Just an example
})
.catch(error => {
res.status(500).send(error);
});
});
您还可能应该在用户注册时进行标记,以避免其他用户再次使用该电话号码。根据您的数据模型,可能需要在Cloud Function中实施几项检查。