javascript - 在创建用户时将数据写入 Firestore 不起作用
问题描述
我正在使用 VueCLI 和 Firebase(Auth 和 Firestore)。
本质上,该函数被正确调用并在数据库中正确注册用户,但是,没有在 .createUserWithEmailAndPassword 函数上调用承诺(例如 .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
函数中初始化要清楚得多。
推荐阅读
- django - Django密码重置电子邮件显示错误的域
- scala - Parquet 数据类型问题
- javascript - 在 jQuery 中创建多个相同的元素
- android - Data not updating in Android view pager
- ios - 钥匙串如何仅删除特定项目
- php-7 - PHP 7 不带参数的函数中的参数太少
- python-3.x - 如何在python中批量捕获stdout的输出?
- python - 从python中的数组中提取信息
- spring - 我们如何在 Spring MVC 中使用具有父子关系的复选框?
- javascript - 带有数组推送的嵌套 for 循环会产生不需要的结果