javascript - firestore 添加数据两次并且不让我拥有 UID

标签 javascript firebase google-cloud-firestore

您好,我正在尝试找到一种方法,可以在 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/

相关文章:

swift - Firebase 实时数据库已删除但仍可登录

google-cloud-platform - 通过 gcloud 在数据存储模式下使用 firestore 时创建数据库?

firebase - 将 Google Firebase Firestore 与 ChatGPT API 集成

javascript - cookie 是从服务器向客户端发出指令以执行某些 js 代码的唯一方法吗?

javascript - "typeof"与 "in"用于检查对象中是否存在属性

ios - Firebase -Auth.auth().currentUser?.phoneNumber 返回 nil

javascript - user_id 将在 firebase 云函数中未定义

javascript - 如何使用Firestore设计模型?

javascript - 从元素中获取单个类名作为字符串

javascript - 如何让背景图像每 15 秒自动更换一次? JavaScript? jQuery?