javascript - 创建用户时将数据写入 Firestore 不起作用

标签 javascript firebase vue.js google-cloud-firestore firebase-authentication

我正在使用 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
    })
}

enter image description here

最佳答案

您有一个函数 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/

相关文章:

javascript - 尝试导入错误 : 'behavior' is not exported from 'd3'

android - Flutter Android firebase 通知在 Release模式下不起作用

ios - 用于配置具有多个 Firebase 调用的 View 的数据源

javascript - es6 相当于下划线 findWhere

javascript - 从控制台(Chrome 或 Firefox)访问 Angular Controller

javascript - 添加多维数组

firebase - VueJS + Firebase Auth + Route Guards - 同步问题/竞争条件

vue.js - 如何隐藏 Ag-grid 中的列标题?

javascript - 手动将全局注册的 Vue 组件挂载到遗留应用程序中?

javascript - 无法使用 fabricjs + vuejs 初始化 Canvas (this.lowerCanvasEl.getContext 不是函数)