【发布时间】: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