上篇文章介绍了:同一浏览器只允许同时登录一个账号的解决办法
这篇文章记录下项目中确定的最终方案。

场景: 同一浏览器,登陆账号A后,打开新的tab标签页,登陆账号B,用户A将会强制返回登陆页面;
这个场景应该很多前端小伙伴会遇到的,下面将分享下我项目中实际使用的方法;
逻辑思路: A用户登陆成功后,记录token或者id,存储到local或者cookies,同步提交token或id数据到vuex中。 新的标签页,登陆用户B,拿B的token与A用户vuex中的toekn做对比,不一致,则将A强制回登陆页面。在App.vue文件使用 document.addEventListener(‘visibilitychange’, function(){}j监听打开新的tab标签页

登陆页:

 loginValidate() {this.$refs['loginForm'].validate(async valid => {if (valid) {this.loading = truetry {const res = await login({loginForm }))if (res?.data) {// 存储token到cookiesthis.setToken(res.data.AuthToken)//设置token数据给到vuexthis.$store.commit('token/setTokenInfo', res.data.AuthToken)}} catch (error) {}} else {return false}})}setToken(token: string) {Cookies.set('yi-token', token)}

store/modules/token.js
注意:这里给state中的tokenInfo设置了默认值:cookies中的token,避免用户点击浏览器刷新按钮vuex数据会丢失的问题。这个处理真的太绝了,因为项目中还有一项业务逻辑:点击按打开新的tab标签页查看报告,vuex中需仍然带token的。
(vuex数据会丢失的两种情况:1,点击浏览器刷新按钮;2,打开新的tab标签页;)

import Cookies from 'js-cookie'
export default {namespaced: true,state: {tokenInfo: Cookies.get('yishi-token'),},mutations: {setTokenInfo(state, data) {state.tokenInfo = data}},actions: {},getters: {}
}

app.vue文件:

 created() {// 浏览器打开新的tab页,登录其他用户,当前用户强制退出document.addEventListener('visibilitychange', function () {if (store.state.token.tokenInfo != Cookies.get('yi-token')) {router.push({ name: 'login' })}})}

vue同一浏览器只允许同时登录一个账号的解决办法-真实项目使用相关推荐

  1. 运行Chromium浏览器缺少google api密钥无法登录谷歌账号的解决办法

    每次打开 Chromium,地址栏下方就会提示 "缺少 Google API 密钥,因此 Chromium 的部分功能将无法使用".提示不仅很烦人,并且还无法在 Chromium ...

  2. 苹果电脑连linux密码错误,Mac系统登录不进系统解决办法

    1.找到买苹果电脑时附带的 Mac OS X 系统光盘,或者有苹果 Mac OS X 系统镜像的 U 盘/移动硬盘,塞入光驱(或插在 USB /火线接口上).重启苹果电脑,开机时按住"opt ...

  3. csgo 直连服务器,csgo你只可以从大厅连接此服务器解决办法

    csgo你只可以从大厅连接此服务器解决办法: 请完成以下步骤刷新您的 Steam 设置: 您注销并完全退出 Steam . 请打开 Internet Explore.Safari 或 Firefox ...

  4. RVCT远程登录时报错的解决办法

    目录(?)[-] RVCT远程登录时报错的解决办法 关于RVDS40破解中出现Cannot obtain license的解决办法 Cannot obtain license for Compiler ...

  5. fckeditor2.63 上传图片的一个问题的解决办法

    fckeditor2.63 上传图片的一个问题的解决办法: 问题描述: 图片上传成功,但滚动条还处于滚动状态,也没有弹出"上传成功"的消息(本地测试no problems,uplo ...

  6. vue.js 引用背景图 background 无效的3种解决办法

    #vue.js项目中,出现css调用background背景图无效?如何解决? 或者调用<img>标签,也无效果? 直接上代码,自行对比查找一下: 效果图预览 1. 正确的代码,示例如下: ...

  7. SSH 登录速度慢的解决办法

    SSH登录速度慢的解决办法 (1)可能是DNS反向解析的问题 [root@crushlinux~]#vi/etc/ssh/sshd_config在中添加或修改成: UseDNSno [root@cru ...

  8. 教大家多个域名绑定一个空间的解决办法,原创,自己已经测试过了,完全可以绕过杀毒软件,以及空间商.

    一个空间放多个站的办法,多个域名绑定一个空间,域名解析问题的解决办法...创梦原创 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区: www.credream ...

  9. fullpage在vue单页面当中使用会出现的问题以及解决办法

    fullpage在vue单页面当中使用会出现的问题以及解决办法 参考文章: (1)fullpage在vue单页面当中使用会出现的问题以及解决办法 (2)https://www.cnblogs.com/ ...

最新文章

  1. Git 2.25.0 发布,新特性:部分 clone 与稀疏 checkout
  2. Bitcoin Core P2P网络层
  3. activemenu怎么拼 vue_Vue-el-menu使用,点击按钮跳转指定页面
  4. git 改了一段代码不想要了_Git - 如何将master/其他分支上修改代码不提交直接移到新建分支...
  5. jzoj1267-路障【最短路,SPFA】
  6. Jupyter notebook 导入和卸载 conda 虚拟环境
  7. epoch训练时间不同_神经网络训练的三个基本概念Epoch, Batch, Iteration
  8. 格科半导体成功引入ASML先进ArF光刻机
  9. Perl文件处理示例——批量添加Copyright版权信息
  10. 浏览器报错:unexpected end of input 解决方法
  11. 获得微软最有影响力开发者
  12. Ctrl+F5为强制刷新
  13. 百度任玉刚写的对学习Android的理解
  14. 爬取msdn.itellyou.cn网站
  15. linux 命令详解 大于号_linux 命令中的大于号、小于号的作用
  16. 一站式智能化健身管理体验
  17. matlab 出现 numeric,About Numeric Matlab
  18. 彻底解决python关于各种文件(音乐、视屏等)读写的操作
  19. 【tensorrt】——插件写法及python plugin大体流程
  20. 外汇天眼:英国研究人员与南非合作应对气候变化

热门文章

  1. 2020熔化焊接与热切割证考试及熔化焊接与热切割作业考试题库
  2. 美食短视频为何容易吸粉?三个特点让它变身“黑马”
  3. 6.前期调查问卷设计
  4. iOS 企业版账号打包及发布-图文流程详解
  5. java 反射机制的基本知识
  6. 2021年甘肃省安全员C证试题及解析及甘肃省安全员C证实操考试视频
  7. Java EE 、Java SE API帮助文档 中文、英文 下载
  8. 【软件测试】python+selenium自动化测试
  9. JavaScript函数调用方式:简单调用+在超链接中调用JavaScript函数+在事件中调用JavaScript函数
  10. matlab-LMI工具箱