Хранилище Nuxt vuexfire запускается до того, как пользователь прошел аутентификацию в firebase - PullRequest
0 голосов
/ 19 января 2020

Я использую Nuxt с Vuexfire, мой индекс. js внутри магазина это:

import {
  vuexfireMutations
} from 'vuexfire'
import JWTDecode from 'jwt-decode'
import cookieparser from 'cookieparser'
export const mutations = {
  // other mutations
  ...vuexfireMutations
}

export const actions = {
  nuxtServerInit({
    commit
  }, {
    req
  }) {
    if (process.server && process.static) return
    if (!req.headers.cookie) return;

    const parsed = cookieparser.parse(req.headers.cookie)
    const accessTokenCookie = parsed.access_token

    if (!accessTokenCookie) return;

    const decoded = JWTDecode(accessTokenCookie)

    if (decoded) {
      commit('users/SET_USER', {
        uid: decoded.user_id,
        email: decoded.email
      })
    }

  },

}

, и у нас есть магазин / станции / индекс. js:

import {
  auth,
  db
} from '@/plugins/firebase'
import {
  firebaseMutations,
  firebaseAction
} from 'vuexfire'
const itemsRef = db.ref('/user-station/uid....')

export const state = () => ({
  stations: []
})

export const getters = {
  items: state => {
    return state.stations
  }
}

export const actions = {
  init: firebaseAction(({
    bindFirebaseRef
  }) => {
    //auth.onAuthStateChanged((user) => {
    //const itemsRef = db.ref('/user-station/' + user.uid)
    bindFirebaseRef('stations', itemsRef)
    //})

  })
}

Итак, у нас есть отдельная страница входа в систему, когда пользователь входит в систему впервые, я получаю эту ошибку, повторяющуюся в браузере, проверяющую:

Error: [vuex] do not mutate vuex store state outside mutation handlers.

и эту ошибку в терминале:

permission_denied at /user-station/uid.....: Client doesn't have permission to access the desired data.

похоже на хранилище, инициированное до аутентификации firebase, потому что, когда я обновляю sh, на странице нет ошибок, и она работает.

другая проблема - я хочу получить uid аутентифицированного пользователя и используйте его в качестве пути в ref следующим образом:

const _uid = auth.currentUser.uid
const itemsRef = db.ref(`/user-station/${_uid}`)

, но это также дает другую ошибку:

Cannot read property 'uid' of null

Как я могу инициировать запуск магазина / станций после входа пользователя в систему?

...