Использование firebase auth для регистрации пользователя выдает ошибку, но все равно регистрируется правильно

У меня есть довольно редкая страница "register.html", где я читаю адрес электронной почты и пароль пользователя и регистрируюсь через createUserWithEmailAndPassword. У меня есть .then() метод, который НЕ вызывается. У меня также есть прикрепленный .catch() метод, который ДЕЙСТВИТЕЛЬНО вызывается с ошибкой user is not defined.

Во-первых, user is not defined кажется более подходящим для входа в систему, чем для регистрации. Все дело в том, чтобы «определить нового пользователя!»

Во-вторых, у меня также есть .onAuthStateChanged прослушиватель, который ДЕЙСТВИТЕЛЬНО показывает, что статус пользователя меняется на авторизованный после регистрации.

В-третьих, зайдя в панель авторизации firebase, я действительно вижу только что созданного пользователя!

Почему вызывается мой catch блок, а не then?

Вот мой код:

auth.createUserWithEmailAndPassword(username, password)
                .then(function(){
                     //user signed in
                    console.log('auth', user, 'registered');
                    if(location.href == document.referrer){
                        location.href = "/website/index.html";
                    }
                    else{ location.href = document.referrer; }
                })
                .catch(function(error) {
                    var errorCode = error.code;
                    var errorMessage = error.message;
                    $('#passwordAlert').show();
                    $('#passwordError').text(errorMessage);

                    console.log("Registeration failure:", username);
                    console.log('\t',errorCode);
                    console.log('\t',errorMessage);
                    //alert user
                });

person Shahbaz    schedule 16.04.2020    source источник
comment
Не могли бы вы поделиться кодом ошибки и сообщением?   -  person Doug Stevenson    schedule 16.04.2020
comment
Сообщение об ошибке: «Пользователь не определен», а код ошибки равен нулю.   -  person Shahbaz    schedule 16.04.2020
comment
Это не имеет смысла. Возможные коды ошибок перечислены в документации API. Он должен быть одним из таких. firebase.google.com/docs/reference/ js /   -  person Doug Stevenson    schedule 17.04.2020


Ответы (2)


По моему опыту, при попытке ответить на этот вопрос Firebase (веб) - добавить данные пользователя при регистрации

.then не вызывается, потому что createUserWithEmailAndPassword

Создает новую учетную запись пользователя, связанную с указанным адресом электронной почты и паролем. После успешного создания учетной записи пользователя этот пользователь также войдет в ваше приложение.

Итак, «этот пользователь также войдет в ваше приложение». Он вызовет .onAuthStateChanged и по причине idk просто make .then больше не будет вызываться.


.catch вызывается, потому что onAuthStateChanged является не запускается, вход или выход не происходит

После 4.0.0 наблюдатель запускается только при входе или выходе.

person Zafkiel Dane    schedule 16.04.2020
comment
Это не так. then() должен всегда вызываться, если вызов был успешным, а catch() всегда будет вызываться при ошибке. Он не принимает во внимание какие-либо прослушиватели состояния аутентификации, которые могут быть подключены. Слушатели просто слушают - они не меняют способ работы любого API. - person Doug Stevenson; 16.04.2020

Я попытался добавить немного больше журналов, как кто-то просил. Однако теперь я получаю ожидаемые результаты. Я знаю, что не менял никакой логики, только console.log утверждения. Однако теперь проблема решена. Не уверен, был ли это временный сбой в firebase (вероятно, маловероятный) или ошибка с моей стороны (хотя я не публиковал сообщение, пока не потратил пару часов на мою страницу html / js из 177 строк, просматривая документы и т. .).

В любом случае проблема решена.

person Shahbaz    schedule 17.04.2020