Vue.js 为什么我的Vuex getter在客户端返回TRUE,在服务器端返回FALSE?
我使用NUXT中间件检查用户是否登录,并相应地保护某些路由。问题是,当登录用户刷新其中一个受保护路由上的页面时,会话将丢失 我有一个处于Vuex存储状态的getter(使用NUXT): 我正在访问中间件中的此getter以将未经验证的用户重定向到登录页面:Vue.js 为什么我的Vuex getter在客户端返回TRUE,在服务器端返回FALSE?,vue.js,vuejs2,vuex,nuxt.js,Vue.js,Vuejs2,Vuex,Nuxt.js,我使用NUXT中间件检查用户是否登录,并相应地保护某些路由。问题是,当登录用户刷新其中一个受保护路由上的页面时,会话将丢失 我有一个处于Vuex存储状态的getter(使用NUXT): 我正在访问中间件中的此getter以将未经验证的用户重定向到登录页面: let isLoggedIn = context.store.getters.isLoggedIn if (!isLoggedIn && protectedRoutes.includes(context.route.name)
let isLoggedIn = context.store.getters.isLoggedIn
if (!isLoggedIn && protectedRoutes.includes(context.route.name)) {
let language = context.store.language ? context.store.language : 'en'
context.redirect(`/${language}/login`)
}
但它不起作用。当我在console.log()中输入这个getter的值时,在客户端得到TRUE,在服务器端得到FALSE。如何使它们与Vue/Vuex保持同步
此外,每当我在服务器端调用console.log()上下文对象时,它似乎处于初始状态。我的方法肯定有根本性的问题。当用户刷新页面时,所有vuex状态都将丢失,并从新开始。您需要在如下位置初始化用户
如何将
state
参数传递给isLoggedIn
?它只是Vuex存储上的一个getter,因此正在使用当前存储状态实例。
let isLoggedIn = context.store.getters.isLoggedIn
if (!isLoggedIn && protectedRoutes.includes(context.route.name)) {
let language = context.store.language ? context.store.language : 'en'
context.redirect(`/${language}/login`)
}
actions: {
nuxtServerInit ({ commit }, { req }) {
if (req.session.user) {
commit('user', req.session.user)
}
}
}