Во-первых, вы помещаете объявление plugin
внутри modules
, и оно должно быть снаружи, на том же уровне.
У вас есть:
export default new Vuex.Store({ modules:{
userStore,
plugins: [vuexLocalStorage.plugin] },
И это должно быть:
export default new Vuex.Store({
modules:{
userStore
},
plugins: [vuexLocalStorage.plugin]
}
Во-вторых, вы указываете путь к модулю хранилища для сохранения в подключаемом модуле vuex-persistedstate?
Я не вижу нигде этой декларации, и в этом случае, я думаю, вы должны указать ее следующим образом:
const vuexLocalStorage = new VuexPersist({
paths: ['userStore'], //an array of the name of your store modules you want to persist
key: 'vuex',
storage: window.localStorage
})
И, возможно, потребуется установить модуль в качестве пространства имен, например:
const namespaced = true
const state = {
authUser:null,
roles:null
}
const mutations = {
SET_AUTH_USER(state,userObj){
state.authUser = userObj
},
SET_USER_ROLE(state,userRole){
state.roles = userRole
}
}
const actions = {
setUserObject :({commit},userObj) => {
commit('SET_AUTH_USER',userObj)
},
setUserRoles :({commit},userRole) => {
commit('SET_USER_ROLE',userRole)
}
}
export default {
namespaced,
state,
mutations,
actions
}
А также я рекомендую использовать js-cookies вместо localStorage из соображений безопасности, и ваша реализация будет выглядеть следующим образом:
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import userStore from '/path/to/userStore'
import * as Cookies from 'js-cookie'
export default new Vuex.Store({
plugins: [
createPersistedState({
paths:['userStore'], // YOU DON'T NEED TO SPECIFY KEY NAME, AS 'vuex' IS SET BY DEFAULT
storage: {
getItem: key => Cookies.get(key),
setItem: (key, value) => {
Cookies.set(
key,
value,
{ expires: new Date(new Date().getTime() + 20 * 60 * 1000) }) // Expiry time 60 minutes
},
removeItem: key => {
Cookies.remove(key)
localStorage.removeItem('vuex')
}
}
}
)],
modules:{
userStore //REMEMBER TO NAMESPACE YOU MODULE!!
}
})
И затем вы можете получить доступ к постоянному ключу из файлов cookie следующим образом:
JSON.parse(Cookies.get("vuex")).userStore //JSON parsed to get the values