Estoy usando VueCLI y Firebase (Auth y Firestore).
Esencialmente, la función se llama correctamente y registra al usuario en la base de datos correctamente; sin embargo, las promesas no se llaman (por ejemplo, .then & .catch) en la función .createUserWithEmailAndPassword.
No se devuelve ningún error y no se registra nada en el almacén de incendios, realmente me ha dejado perplejo.
Sin embargo, ¿a veces funciona exactamente como se esperaba? Pero a menudo de forma irregular.
submit () { var v = this firebase.auth().createUserWithEmailAndPassword(v.form.email, v.form.password) .then(function () { // set account doc var account = { email: v.form.email, name: v.form.name, picture: v.form.picture } db.collection('Users').doc(v.form.email).set(account).then(() => { console.log('Database Details Defined') // Set user display name v.$store.commit('setUserDisplayName', v.form.name) // Set user display name v.$store.commit('setUserImage', v.form.picture) // Set user as signed in v.$store.commit('changeLoginState', true) // Set user email v.$store.commit('setUserEmail', v.form.email) // console.log('Vue Store Details Defined') localStorage.setItem('name', v.$store.state.displayName) localStorage.setItem('email', v.$store.state.email) localStorage.setItem('userImage', v.$store.state.userImage) localStorage.setItem('loggedin', v.$store.state.isLoggedin) // console.log('Local Storage Details Defined') // Redirect user to dashboard v.$router.replace('/') v.registering = false }).catch((error) => { v.databaseError = 'Database Error: ' + error.code + ' - ' + error.message v.registering = false }) }) .catch(function (error) { v.registrationError = 'Registration Error: ' + error.code + ' - ' + error.message v.registering = false }) }Tiene una función getDB() que devuelve el valor de la instancia de Firestore, por lo que getDB().collection("users")... puede haber funcionado según lo previsto. No veo dónde se inicializa db en este archivo específico, por lo que console.log(db) podría ayudar a verificar cuál es su valor.
firebase.firestore().collection('Users').doc(v.form.email).set(account) Esto funcionó según lo previsto porque firebase.firestore() devolverá la instancia de Firestore con seguridad. Recomendaría exportar los servicios de Firebase directamente y no en funciones. Por ejemplo, podría crear un archivo firebase.js e inicializar Firebase allí:
var firebase = require('firebase/app') require('firebase/firestore') const firebaseConfig = { } if (!firebase.apps.length) { firebase.initializeApp(config); } const auth = firebase.auth() const db = firebase.firestore() export {db, auth} Debe inicializar Firebase solo una vez, como se muestra. Será mucho más claro en lugar de inicializar en la función getDB .