好吧,我开始与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这个项目。
我用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')
}
}
对于任何不满意存储在Cookie中的信息,这里是我的解决方案:
我已经有很多的这个问题,我并不满意设置cookie。 如果您正在运行Nuxt并没有告诉它在水疗中心模式下运行,将在通用模式下运行。 Nuxt定义通用模式为:
同构应用(服务器端呈现+客户端导航)
结果使得localStorage的未定义服务器端并因此引发错误。
白送我是从中间件文件控制台记录,并且Vuex输出到终端,而不是在开发者工具控制台在浏览器中。
对于我的解决方案是将模式改变为温泉在其位于根部的nuxt.config.js。
请注意,您仍然可以访问本地存储,运行通用模式,在页面的文件和组件,因为它们不是服务器端。
中间件的文件,在普遍的模式,运行服务器端,所以改变水疗方式,使它们运行客户端,从而允许他们访问的localStorage。
有关Nuxt模式的更多信息,请阅读这些:
- https://nuxtjs.org/guide/
- https://recurse.me/posts/choosing-a-nuxt-mode.html
你可以使用像这样以存储在nuxt,将工作的客户端和服务器端
https://github.com/alibaba-aero/nuxt-universal-storage