一个浏览器只能登录一个账号

303 阅读1分钟

场景

  • 浏览器上同一个项目地址,第一个标签页登录admin账号,第二个标签页登录普通账号

  • 此时再回到admin标签页,会出现权限异常,

  • 因为token放在sessionStorage里面的,普通用户的token覆盖了admintoken

解决

  • 项目中采用的是后登录的账号,覆盖之前的账号,之前的账号自动退出

  • 用户登录后,在sessionStoragelocalStorage都存入用户的uerId

  • 对需要token的请求做拦截,判断sessionStoragelocalStorage里面的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' })
          }
      })