访问localStorage的在中间件 - NuxtJs(Access LocalStorage

2019-09-30 01:49发布

好吧,我开始与nuxt,我有以下途径:

/home

/dashboard

/login

我要保护/仪表板,但仅限于用户登录与令牌localStorage

我想这样做的最简单的方法是通过创建一个/middleware/auth.js

export default function () {
  if (!window.localStorage.getItem('token')) {
    window.location = '/login'
  }
}

并登记它在/dashboard/index.vue组件。

<script>
export default {
  middleware: 'auth',
}
</script>

但我不能访问localStorage中间件内,因为localStorage的是客户端。

我已经尝试在添加此相同的检查created()仪表盘布局,但我不能返回窗口没有设置mounted()为时已晚,只能检查后的页面已经被完全组装。

那么,如何才能做到这一点? 注:我不打算使用任何Vuex这个项目。

Answer 1:

我用cookie的万向nuxt

对登陆行动vuex商店,我设置与令牌提交

window.$nuxt.$cookies.set('token', payload, {
            path: '/',
})

中间件/ auth.js

export default (context) => {
    if (!context.app.context.app.$cookies.get('token')) {
        return context.redirect('/login')
    }
}


Answer 2:

对于任何不满意存储在Cookie中的信息,这里是我的解决方案:

我已经有很多的这个问题,我并不满意设置cookie。 如果您正在运行Nuxt并没有告诉它在水疗中心模式下运行,将在通用模式下运行。 Nuxt定义通用模式为:

同构应用(服务器端呈现+客户端导航)

结果使得localStorage的未定义服务器端并因此引发错误。

白送我是从中间件文件控制台记录,并且Vuex输出到终端,而不是在开发者工具控制台在浏览器中。

对于我的解决方案是将模式改变为温泉在其位于根部的nuxt.config.js。

请注意,您仍然可以访问本地存储,运行通用模式,在页面的文件和组件,因为它们不是服务器端。

中间件的文件,在普遍的模式,运行服务器端,所以改变水疗方式,使它们运行客户端,从而允许他们访问的localStorage。

有关Nuxt模式的更多信息,请阅读这些:

  • https://nuxtjs.org/guide/
  • https://recurse.me/posts/choosing-a-nuxt-mode.html


Answer 3:

你可以使用像这样以存储在nuxt,将工作的客户端和服务器端

https://github.com/alibaba-aero/nuxt-universal-storage



文章来源: Access LocalStorage in Middleware - NuxtJs