场景
-
浏览器上同一个项目地址,第一个标签页登录
admin账号,第二个标签页登录普通账号 -
此时再回到
admin标签页,会出现权限异常, -
因为
token放在sessionStorage里面的,普通用户的token覆盖了admin的token
解决
-
项目中采用的是后登录的账号,覆盖之前的账号,之前的账号自动退出
-
用户登录后,在
sessionStorage和localStorage都存入用户的uerId -
对需要
token的请求做拦截,判断sessionStorage和localStorage里面的userId是否一致,不一致则判断被顶号了,执行退出逻辑 -
在切换路由和切换标签页时也做了上面的判断逻辑
-
切换标签页监听如下
document.addEventListener('visibilitychange', () => {
// 判断逻辑
const isLogin = sessionStorage.getItem('token')
if (!isLogin) return
const lid = localStorage.getItem('userId')
const sid = sessionStorage.getItem('userId')
if (lid != sid) {
this.$router.push({ path: '/login' })
}
})