Я использую 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
Как я могу инициировать запуск магазина / станций после входа пользователя в систему?