Vuex和Firebase,存储其他用户信息

时间:2019-05-23 13:00:39

标签: firebase vue.js firebase-realtime-database vuex

我具有使用Firebase和Vuex创建用户的功能,并且希望存储有关该用户的其他信息。

创建用户时,我运行以下代码,其中有效负载包含电子邮件,密码和名称作为对象。 这是vuex中的动作。

signUserUp ({ commit }, payload) {
  firebase.auth().createUserWithEmailAndPassword(payload.email, payload.password)
    .then((u) => {
      firebase.database().ref('users/' + u.user.uid).set({
        name: payload.name,
        email: payload.email,
        registeredTools: []
      })
      // This commit('setUser')... sets the local data (local state).
      commit('setUser', { id: u.user.uid, name: payload.name, email: payload.email, registeredTools: [] })
    })
    .catch(
      error => {
        console.log(error)
      }
    )
},

创建用户后,我的数据库存储了名称和电子邮件之类的数据,(我很快将向该用户添加一些新的数据字段。)

这按预期工作。我有一个autoSignIn功能,可在刷新或关闭/打开浏览器时更新本地用户。当我获取用户数据并尝试将auth函数中的对象(仅ID和电子邮件)与我数据库中的对象(目前仅包含用户名)合并时,会发生我的问题。

-这是我的尝试:

autoSignIn ({ commit }, payload) {
  const userDataFromAuth = { id: payload.uid, email: payload.email }
  firebase.database().ref('users/' + payload.uid).once('value')
    .then((data) => {
      const userDataFromDatabase = []
      const obj = data.val()
      for (let key in obj) {
        userDataFromDatabase.push({
          name: obj[key].name
        })
      }
      var userData = {...userDataFromAuth, ...userDataFromDatabase}
      console.log(userData)
      commit('setUser', userData)
    })
},

关于如何执行此操作的任何想法?

1 个答案:

答案 0 :(得分:0)

这是解决问题的很好的解决方案

autoSignIn ({ commit }, payload) {
  const userDataFromAuth = { id: payload.uid, email: payload.email }
  firebase.database().ref('users/' + payload.uid).once('value')
    .then((data) => {
      const userDataFromDatabase = { name: data.child('name').val() }
      const userData = { ...userDataFromAuth, ...userDataFromDatabase }
      commit('setUser', userData)
    })
},

首先,我们从firebase的身份验证功能(包含ID和电子邮件)中获取数据。然后,我们在“ users /”和payload.uid(id)下获取数据,然后合并这两个javascript对象,并将它们存储在store.users(vuex的本地数据存储)中,我们可以在整个过程中使用它们应用。请随时提出问题或提出改进建议。