Firebase onAuthStateChanged создает помехи createUserWithEmailAndPassword.then - PullRequest
0 голосов
/ 11 апреля 2019

Я использую

firebase.auth().createUserWithEmailAndPassword(email, password1)
.then(() => {
        var user_uid = firebase.auth().currentUser.uid;
        db.collection(ll_collection).doc(user_uid).set({
          user_review: 0,
          number_of_reviews: 0
        })
})

Создает документ, названный в честь идентификатора пользователя, сразу после создания учетной записи.

У меня также есть другая функция в том же файле, которая проверяет, вошел ли пользователь в систему:

firebase.auth().onAuthStateChanged(function(user) {
  if(user) {
    setTimeout(function() {
      window.location.href = "/";
    }, 400)                 
  }
})

Мне пришлось установить таймаут для этой функции, так как учетная запись вошла сразу после создания учетной записи. Если я не укажу время ожидания, оно будет перенаправлено на «/» сразу после создания учетной записи без создания документа. Это имеет смысл, поскольку onAuthStateChanged работает в режиме реального времени.

Но есть ли другой способ, с помощью которого я могу перенаправить зарегистрированного пользователя на страницу, не мешая операции после создания учетной записи?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 апреля 2019

Обычно я использую только onAuthStateChanged(), а не обработчик завершения then() для создания пользователя.

Таким образом, в этом случае создание и перенаправление документов происходит в onAuthStateChanged, и вы можете синхронизировать их там.:

firebase.auth().createUserWithEmailAndPassword(email, password1);

firebase.auth().onAuthStateChanged(function(user) {
    if(user) {
        db.collection(ll_collection).doc(user.uid).set({
            user_review: 0,
            number_of_reviews: 0
        }).then(function() {
            window.location.href = "/";
        });
    }
})

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

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