У меня есть функция, где я создаю пользователя с помощью 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 (только идентификатор и адрес электронной почты) с объектом из моей базы данных, который в настоящее время содержит только имя пользователя.
- Вот моя попытка:
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)
})
},
Есть идеи, как мне это сделать?