vue-router中beforeEach中获取不到session storage
是这样的,我通过localstorage跨标签页传递sesstion storage,
代码如下,网上copy的,其实需求是关闭标签页会清除登录态,而且新打开标签页的时候又不能让登录态失效。所以想到sesstion storage。但是这个有个副作用,就是通过a链接跳转和新打开一个标签页/或者输入url,结果是不一样的。新打开的标签页是获取不到session storage的,因此以下通过localstorage中转sesstion storage
`window.memoryStorage = {};
function isEmpty(o) {
for (var i in o) {
return false;
}
return true;
};
if (isEmpty(memoryStorage)) {
localStorage.setItem('getSessionStorage', Date.now());
};
window.addEventListener('storage', function (event) {
// debugger;
if (event.key == 'getSessionStorage') {
localStorage.setItem('sessionStorage', JSON.stringify(memoryStorage));
localStorage.removeItem('sessionStorage');
} else if (event.key == 'sessionStorage' && isEmpty(memoryStorage)) {
var data = JSON.parse(event.newValue),
value;
for (var key in data) {
memoryStorage[key] = data[key];
}
}
});`
以上代码放在main.js入口文件中,这都没什么问题,现在问题是下面
`
router.beforeEach((to, from, next) => {
if (to.path == '/login' || to.path == '/register' || to.path == '/error') { // 如果去的路径是登陆或注册就不判断有没有token。 是其他的路径 那么就判断他是否有token
} else {
let token = sessionStorage.getItem('token')
console.log("token", token)
//问题在这里,一旦通过新标签页进入路由,token为空,但是等页面加载完毕之后sesstion storage 中token是有值的,只是代码进到这里面来的时候,新打开的标签页里面是没有sesstion storage的,然后就自动跳回登录页面了
router.push('/login')
return
} else {
next()
//有token就执行下一步
}
}
}
next()//是登陆就执行下一步
})
`
怎么解决以上问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要把逻辑重新理顺,代码建议重新上传一份,从现有代码看好像死循环了。