Перенаправление createUserWithEmailAndPassword вызывает ошибку

Я хочу перенаправить пользователя на часть моего сайта после регистрации, а не входа в систему. Итак, в конце функции createUserWithEmailAndPassword я меняю window.location, и все работает нормально, я получаю сообщение об ошибке, поскольку функция была прервана

Как этого избежать? Есть signInWithRedirect и getRedirectResult, но документация Firebase не включает электронную почту в качестве провайдера, только facebook

Я могу попытаться поймать ошибку, но, возможно, есть более элегантный способ решить эту проблему?

function handleSignUp() {
    var email = document.getElementById('email').value;
    var password = document.getElementById('password').value;
    if (email.length < 4) {
        alert('Please enter an email address.');
        return;
    }
    if (password.length < 4) {
        alert('Please enter a password.');
        return;
    }
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
        var errorCode = error.code;
        var errorMessage = error.message;
        if (errorCode == 'auth/weak-password') {
            alert('The password is too weak.');
        } else {
            alert(errorMessage);
        }
        console.log(error);
    });
    window.location = "/add-location";
}

// ошибка консоли

A network error (such as timeout, interrupted connection or unreachable host) has occured.

person van    schedule 06.08.2017    source источник


Ответы (2)


Просто перенаправьте после успешной регистрации:

firebase.auth().createUserWithEmailAndPassword(email, password)
  .then(function(user) {
    window.location = "/add-location";
  })
  .catch(function(error) {
    ...
  });

Вы перенаправляли до того, как обещание было разрешено, поэтому возникла ошибка прерванной операции.

person bojeil    schedule 06.08.2017
comment
Благодарю вас! На самом деле я нашел обходной путь, я отправляю электронное письмо пользователю, чтобы подтвердить его электронную почту, и ссылка / add-location ... двух зайцев одним выстрелом Но ваш ответ кажется очень разумным, спасибо - person van; 07.08.2017

Как насчет перенаправления после обратного вызова при входе?

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in. So redirect:
     window.location = "/add-location";
  } else {
    // No user is signed in.
  }
});

Как указано в документах, после создания статус автоматически изменяется на «Вы вошли в систему», что вызовет перенаправление после успешного входа в систему.

person Joaquin Peraza    schedule 06.08.2017
comment
Привет, спасибо за ваш ответ. Как бы я мог ограничить это только первым входом в систему - я не хочу перенаправлять на / add-location при входе в систему, а только при регистрации (что, следовательно, будет первым входом в систему) - person van; 06.08.2017
comment
Насколько я знаю, Google не предоставляет информацию о типе входа в систему, потому что для входа могут использоваться разные методы, несмотря на то, что вы используете создание учетной записи, поэтому вам нужно будет сохранить в базе данных firebase, возможно, путь с этой информацией и внутри прослушивателя событий проверьте, что в случае входа в систему и перенаправления в случае обнаружения первого входа в систему. - person Joaquin Peraza; 06.08.2017
comment
Спасибо, я, скорее всего, выберу это, если не будет более простого решения - оно отлично работает только с этой ошибкой, которую я хотел бы избежать. - person van; 07.08.2017