Vuex и Firebase, хранить дополнительную информацию о пользователе - PullRequest
1 голос
/ 23 мая 2019

У меня есть функция, где я создаю пользователя с помощью 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)
    })
},

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 23 мая 2019

Это довольно хорошее решение проблемы:

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)
    })
},

Сначала мы получаем данные из auth-функции firebase (которая содержит id и email). И затем мы получаем данные в 'users /' + payload.uid (id), а затем объединяем эти два объекта javascript и сохраняем их в store.users (локальном хранилище данных vuex), которое мы можем использовать на протяжении всего нашего приложение. Пожалуйста, не стесняйтесь задавать вопросы или предложения по улучшению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...