vue-router中beforeEach中获取不到session storage

发布于 2022-09-11 23:02:43 字数 1601 浏览 8 评论 0

是这样的,我通过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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦初启 2022-09-18 23:02:43

要把逻辑重新理顺,代码建议重新上传一份,从现有代码看好像死循环了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文