我正在使用 VueCLI 和 Firebase(Auth 和 Firestore)。
本质上,该函数被正确调用并在数据库中正确注册用户,但是,在 .createUserWithEmailAndPassword 函数上并未调用 promise (例如 .then 和 .catch)。
没有返回错误,Firestore 中也没有注册任何内容,这真的让我很困惑。
但是,有时它的工作原理完全符合预期?但经常不规律。
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
})
}
最佳答案
您有一个函数 getDB()
返回 Firestore 实例的值,因此 getDB().collection("users")...
可能已按预期工作。我没有看到 db
在此特定文件中的初始化位置,因此 console.log(db)
可能有助于检查它的值。
firebase.firestore().collection('Users').doc(v.form.email).set(account)
这按预期工作,因为 firebase.firestore()
肯定会返回 Firestore 实例。我建议直接导出 Firebase 服务,而不是在函数中。例如,您可以创建一个文件 firebase.js
并在其中初始化 Firebase:
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}
您只需初始化 Firebase 一次,如图所示。这比在 getDB
函数中初始化要清晰得多。
关于javascript - 创建用户时将数据写入 Firestore 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68795879/