FireStore добавляет данные дважды и не дает мне UID - PullRequest
0 голосов
/ 12 января 2019

Здравствуйте. Я пытаюсь найти способ, которым я могу добавить данные один раз в firestore, но он продолжает добавлять данные дважды с другим уникальным идентификатором, а также у меня возникают проблемы с поиском способа ввода пользовательского UID как " 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');
      } 
  })

});

1 Ответ

0 голосов
/ 12 января 2019

Слушатель onAuthStateChanged может вызываться несколько раз. Это ожидаемое поведение, и ваш код должен быть готов к нему. Это означает, что код по сути должен быть идемпотентным: его многократный вызов должен иметь один четко определенный результат.

Вам кажется, что вам нужен отдельный документ для конкретного пользователя, даже если ваш onAuthStateChanged слушатель вызывается несколько раз. Простой способ сделать это - использовать UID пользователя в качестве идентификатора документа.

Код для этого выглядит примерно так:

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');
  } 
})

Я заметил, что вы прикрепляете слушателя в обработчике кликов. Всякий раз, когда вы присоединяете слушателя, сразу подумайте, когда этот слушатель будет удален. Имея только тот код, которым вы поделились, если пользователь дважды щелкнет, вы получите двух слушателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...