Слушатель 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');
}
})
Я заметил, что вы прикрепляете слушателя в обработчике кликов. Всякий раз, когда вы присоединяете слушателя, сразу подумайте, когда этот слушатель будет удален. Имея только тот код, которым вы поделились, если пользователь дважды щелкнет, вы получите двух слушателей.