【问题标题】:NUXT middleware store state is empty even though Vuex in dev tools showing dataNUXT 中间件存储状态为空,即使开发工具中的 Vuex 显示数据
【发布时间】:2020-02-29 16:00:23
【问题描述】:

我正在使用 NUXT 2.0(模式 = 通用)和 Auth 模块,对我来说,该模块已设置并正常工作!

如果我使用示例代码,在登录后查看任何页面时。我可以看到用户没有问题。

<div v-if="$auth.loggedIn">
  Logged In {{ $auth.user.email}}
</div>

如果我在开发工具中查看 VUEX,我还可以看到 state.auth.userhttps://d.pr/i/3pXcLa

但是如果我添加一些中间件并加载页面 store.state.user 是空的。示例简单代码。

export default function ({ store, redirect }) {
  console.log(store.state.auth)
}

我是否正确使用了中间件?

真心希望有人能帮忙。

【问题讨论】:

    标签: vue.js nuxt.js


    【解决方案1】:

    每当您重新加载页面时,您的商店都会重新加载到其初始状态,因为它位于客户端。

    这意味着每当您刷新页面时,您 Vuex 商店中的所有数据都会丢失到初始状态。

    1 解决方案可能是:

    -> 您使用您的登录用户创建一个 cookie,并在中间件中检查该 cookie 是否包含该登录用户。

    在通用模式下,中间件仅适用于服务器站点,因此您无法访问window,这意味着您无法访问 cookie。但是还有另一种访问方式:

    你解构了req的属性:

    export default function ({ store, redirect, req }) {
      console.log(req.headers.cookies)
      // or req.headers.cookie ? i am not sure here
    }
    

    现在您可以访问 cookie。

    我建议为此使用 JWT。 每当您成功登录时,您都应该在服务器上生成一个 JWT 并将其存储在您的 cookie 中。

    每次您尝试访问一些“秘密”页面时,您都会将存储在 cookie 中的 JWT 发送回服务器以验证 JWT 是否仍然有效,如果有效,那么您让用户继续前进,否则您拒绝它。

    【讨论】:

    • 我正在使用 cookie。在这个周期中,我什么时候可以检查它的服务器请求并检查商店?
    • 如果你使用通用模式,你的中间件总是服务器端而不是客户端。但你也可以访问商店
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多