Пользователь Firebase.linkWithCredential не является функцией

#javascript #firebase #firebase-authentication

# #javascript #firebase #firebase-аутентификация

Вопрос:

Я следовал этому руководству о том, как связать существующие учетные данные с новыми учетными данными из Facebook, и все работает должным образом, за исключением последней части, которая связывает пользователя с новыми учетными данными, я продолжаю получать ошибку «user.linkWithCredential не является функцией».

Вот мой код:

 $(document).on('click', "#btn-login-fb", function (event) {
    //A bunch of code here where I do the login process
    }).catch(function (error) {  
        //Here is where I need to handle the error and link accounts          
        var errorCode = error.code;
        var errorMessage = error.message;
        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;

        //
        //   LINKING FACEBOOK WITH EXISTING EMAIL/PASSWORD USER
        //
        if (error.code === 'auth/account-exists-with-different-credential') {
            // Step 2.
            // User's email already exists.
            // The pending Facebook credential.
            var pendingCred = error.credential;
            // The provider account's email address.
            var email = error.email;
            // Get sign-in methods for this email.
            firebase.auth().fetchSignInMethodsForEmail(email).then(function (methods) {
                // Step 3.
                // If the user has several sign-in methods,
                // the first method in the list will be the "recommended" method to use.
                if (methods[0] === 'password') {
                    // Asks the user their password.
                    // In real scenario, you should handle this asynchronously.
                    //Abrir modal
                    document.getElementById("btnPwModal").click();
                    $(document).on('click', "#btnConfirmPw", function (event) {
                        document.getElementById("btnFecharModal").click();
                        var password = $("#inputPassword").val();
                        firebase.auth().signInWithEmailAndPassword(email, password).then(function (user) {
                            // Step 4a.
                            user.linkWithCredential(pendingCred).then(function () {
                                alert("linko");
                                // Facebook account successfully linked to the existing Firebase user.
                            });;
                        });

                    })
                }
            });
        }

    });
});
 

Есть идеи о том, почему все остальное работает, а linkWithCredential — нет? Спасибо.

Комментарии:

1. Используйте console.log(..) для отладки вашего кода; убедитесь, что порядок, в котором все происходит, соответствует ожидаемому (назначение прослушивателей событий в середине потока аутентификации ветвления кажется странным), и убедитесь, что переменные содержат то, что вы ожидаете

2. Я не мог найти другого способа получения пароля в модальном режиме, в котором пользователь вводит свой пароль, поэтому я выполнил обходной путь слушателя, кроме того, кажется, что мой объект user после signInWithEmailAndPassword равен null или что-то в этом роде, потому что каждое свойство не определено для пользователя.

Ответ №1:

То, что вы получаете после вызова signInWithEmailAndPassword , является UserCredential объектом, а не User объектом. Чтобы получить от UserCredential до `, вы вызываете user его.

Итак:

 firebase.auth().signInWithEmailAndPassword(email, password).then(function (cred) {
  cred.user.linkWithCredential(pendingCred)...
 

Комментарии:

1. Спасибо за подтверждение. Спасибо за предоставление обратной ссылки! Вы не первый, у кого возникла эта проблема, и со ссылкой мы, наконец, знаем, откуда берется путаница. Мы также скоро исправим это, так что, надеюсь, вы будете последним, кто получит эту ошибку из наших документов.