我的问题是,当页面重新加载时,中间件首先呈现,然后是 vuex;因此,当我想更改 vuex 中的值时,基于用户是否经过身份验证,中间件返回 vuex 的初始值。这意味着,如果用户通过身份验证,它首先显示 false,在渲染 vuex 之后,它再显示 true。但是到那时,中间件已经完成加载。这会导致在页面刷新时将用户重定向到登录页面。我的问题是,它们是我可以在中间件之前先加载 vuex 的一种方式吗?
这是中间件代码;
export default async function ({ store, redirect }) {
// If the user is not authenticated
const authenticated = await store.state.signup.authenticated
if (!authenticated) {
console.log(!authenticated)
return redirect('/login')
} else {
console.log('I am logged in')
}
}
这是vuex代码;
import axios from 'axios'
export const state = () => ({
authenticated: false,
credential: null,
})
export const mutations = {
ADD_USER(state, data) {
state.credential = data
state.authenticated = true
},
LOGOUT(state) {
state.credential = null
state.authenticated = false
},
}
export const actions = {
async addUser({ commit }, data) {
try {
const response = await axios.post(
'http://localhost:8000/api/rest-auth/registration/',
data
)
commit('ADD_USER', response.data)
this.$router.push('/')
} catch (error) {
return console.log(error)
}
},
async addUserLogin({ commit }, data) {
try {
const response = await axios.post(
'http://localhost:8000/api/rest-auth/login/',
data
)
commit('ADD_USER', response.data)
this.$router.push('/')
} catch (error) {
return console.log(error)
}
},
}
export const getters = {
loggedIn(state) {
return !!state.credential
},
}
一只斗牛犬
相关分类