vue.js - 为什么我的 Vuex getter 在客户端返回 TRUE 而在服务器端返回 FALSE?

标签 vue.js vuejs2 vuex nuxt.js

我正在使用 NUXT 中间件来检查用户是否登录,并相应地保护某些路由。问题是,当登录用户刷新 protected 路由之一上的页面时, session 就会丢失。

我的 Vuex 存储状态有一个 setter/getter (使用 NUXT):

getters: {
  isLoggedIn (state) {
    return !isEmpty(state.auth.email) && !isEmpty(state.auth.token)
  }
}

我正在中间件中访问此 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`)
  }

但是它不起作用。当我 console.log() 这个 getter 的值时,我在客户端得到 TRUE,在服务器端得到 FALSE。如何让它们与 Vue/Vuex 保持同步?

此外,每当我在服务器端console.log()上下文对象时,它似乎都处于初始状态。我的方法一定有根本性的错误。

最佳答案

当用户刷新页面时,所有 vuex 状态都会丢失并从新开始。您需要在类似 nuxtServerInit 的地方初始化用户

actions: {
  nuxtServerInit ({ commit }, { req }) {
    if (req.session.user) {
      commit('user', req.session.user)
    }
  }
}

关于vue.js - 为什么我的 Vuex getter 在客户端返回 TRUE 而在服务器端返回 FALSE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202417/

相关文章:

javascript - 从输入数据作为图像数组传递到 api

javascript - 使用 Vuetify 删除 v-stepper-header 编号

vuejs2 - vuejs(2)样式绑定(bind)top/left属性

vue.js - VueJS 生命周期中的 props 什么时候更新

javascript - Nuxt.js 使用 nuxtServerInit 和 Vuex 在服务器端加载数据

javascript - 如何使用vue将对象传递给select中的方法?

vue.js - 是否可以根据 "el"找到 Vue 组件?

javascript - 我需要在测试中注入(inject)插件,否则我会收到错误日志

javascript - Vuex 突变后如何获取值?

javascript - 从 Vuex 操作将参数传递给 Vuex getter