我具有使用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)
})
},
关于如何执行此操作的任何想法?
答案 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的本地数据存储)中,我们可以在整个过程中使用它们应用。请随时提出问题或提出改进建议。