Я думаю, что поведение предназначено и правильно.Прежде чем что-то получить, маршрутизатор решает, что делать.
Но как решить вашу проблему?
Сначала у меня есть постоянный модуль аутентификации, подобный этому:
export default {
name: 'auth',
namespaced: false,
state: {
token: undefined,
payload: undefined
},
mutations: {
clearAuth (state) {
state.token = undefined
state.payload = undefined
},
setToken (state, token) {
let payload
try {
payload = JSON.parse(atob(token.split('.')[1]))
} catch (e) {
payload = undefined
token = undefined
}
state.token = token
state.payload = payload
}
},
getters: {
token: state => state.token,
isAuthenticated: state => !!state.token,
hasRenewToken: state => !!state.payload && state.payload.renewable
}
}
Затемя использую vuex-persistedstate для инициализации модуля vuex.
import createPersistedState from 'vuex-persistedstate'
const store = new Vuex.Store({
modules: {
auth,
... // other modules
},
plugins: [
createPersistedState({
paths: ['auth']
})
]
})
Теперь, когда магазин создается, вся информация об аутентификации находится в магазине.
И в конце я использую небольшую оболочку дляaxios, как это (request.js):
import axios from 'axios'
import store from '@/store'
const requestHandler = config => {
config.headers = {
'Authorization': store.getters.token
}
config.crossDomain = true
config.method = 'POST'
return config
}
const request = axios.create()
request.interceptors.request.use(requestHandler)
export default request
Теперь я не импортирую axios, а request.js, где бы я ни хотел сделать запрос.
Надеюсь, этот подход поможет вам.По крайней мере, у меня это работает