您好,我正在尝试找到一种方法,可以在 firestore 上添加一次数据,但它会不断使用不同的唯一 ID 添加数据两次,而且我也无法找到一种将用户 UID 作为“输入”的方法文档 ID”
这是我的代码,它使用不同的唯一 ID 而不是 user.uid 添加数据两次
registerBtn.addEventListener('click' , e => {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
db.collection("users").add({
FirstName: firstName,
Middle_Name: middleName,
Last_Name: lastName,
Email: email,
})
console.log('data successfully added');
} else {
console.log('something went wrong');
}
})
});
最佳答案
onAuthStateChanged
监听器可能会被多次调用。这是预期的行为,您的代码应该准备好处理它。这意味着代码本质上必须是幂等的:多次调用它应该有一个明确定义的结果。
对于您来说,您似乎想要一个特定于用户的文档,即使您的 onAuthStateChanged
监听器被多次调用。实现此目的的一个简单方法是使用用户的 UID 作为文档 ID。
其代码如下所示:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
db.collection("users").doc(user.uid).set({
FirstName: firstName,
Middle_Name: middleName,
Last_Name: lastName,
Email: email,
}).then(function() {
console.log('data successfully added');
}};
} else {
console.log('No user signed in');
}
})
我注意到您将监听器附加到点击处理程序中。每当您附加监听器时,请立即考虑何时删除该监听器。仅使用您共享的代码,如果用户单击两次,您最终将得到两个监听器。
关于javascript - firestore 添加数据两次并且不让我拥有 UID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54161163/