【问题标题】:Vuex and Firebase, store additional user infoVuex 和 Firebase,存储额外的用户信息
【发布时间】:2019-10-10 01:32:16
【问题描述】:

我有一个函数,我正在使用 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)
      }
    )
},

创建了用户,我的数据库存储了姓名和电子邮件等数据,(我很快就会为用户添加一些新的数据字段。)

这按预期工作。我有一个自动登录功能,可以在刷新或关闭/打开浏览器时更新本地用户。当我获取用户数据并尝试将身份验证函数中的对象(仅 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)
    })
},

对我如何做到这一点有任何想法吗?

【问题讨论】:

  • registredTools 未保存,因为它是空的。是的,在保存用户数据时最好使用用户 ID 而不是随机推送 ID。

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


【解决方案1】:

这是一个很好的解决方案

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 的 auth-function 中获取数据(其中包含 id 和 email)。然后我们得到 'users/' + payload.uid (id) 下的数据,然后我们合并这两个 javascript 对象,并将它们存储在 store.users(vuex 的本地数据存储)中,我们可以在我们的整个过程中使用应用。请随时提出问题或改进建议。

【讨论】:

  • 谢谢威廉先生。很好的答案。
猜你喜欢
  • 2017-04-21
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多