vue同一浏览器登录多账号处理方案
vue同一浏览器登录多账号处理
背景
项目在线上会遇到管理员类似权限比较大的用户,会在同一浏览器登陆多个账号。由于后端是通过cookie识别,此时cookie已经是最新登陆账号信息。管理员有可能切换tab至之前页面,此时页面显示还是之前信息,当修改信息,提交请求时,其实后端是按照最新登陆用户进行信息处理的。这种情况下,容易误导用户,造成错误的信息修改。
解决
前端种个cookie,监听页面tab切换事件,通过接口返回的id与cookie中的id对比,若不一致,则提示用户刷新页面,页面重新渲染,展示的就是最新登陆用户的信息了
具体实现
store.js
// 装js-cookie种cookie import Cookies from 'js-cookie'; // 每次登录的时候,通过接口获取当前登录账号的LoginName getLoginName() { return api .getLoginName() .then((res) => { if (res.status === 0) { // 这里通过vuex存下来 在app.vue里使用(项目本身已使用vuex 没有的话可以参考vue组件通信) commit('RECORD_LOGIN_NAME', res.loginName); // 拿到结果,存到cookie里 this.loginName = res.loginName Cookies.set('loginName', res.loginName); } }) .catch((e) => { return false; }); },
app.vue
在入口页添加监听页面tab切换的事件
export default{ data () { return { isConfirmShow: false, }; }, methods: { checkNameExpired() { // this.loginName:接口请求获取name的存下来 const loginName_cookie = Cookie.get('loginName'); if (this.loginName !== loginName_cookie && !this.isConfirmShow) { this.isConfirmShow = true; // 这里样式可以根据项目优化 alert(`已登录${loginName_cookie},点击 “确定” 刷新本页面。`); window.location.reload(); this.isConfirmShow = false; } } }, mounted() { document.addEventListener('visibilitychange', this.checkNameExpired); }, beforeDestroy() { document.removeEventListener('visibilitychange', this.checkNameExpired); } };
补充:
vue项目中实现同一个浏览器登录多个用户账号
需求
同一个浏览器两个tab分别登录A
和B
两个账号
问题描述
用户登录会在缓存中存token,键名都是一样的,所以会出现A用户登录,后在另外一个tab里登录B用户,A用户再访问接口的时候,其实是用的B用户的token,因为每个用户的权限不一样,这样就照成了bug
解决思路
让不同的用户存储的token的键名不一样
实现方法 在登录的时候存储用TOKEN+userName
作为键来存储token
import Cookies from 'js-cookie' import Config from '@/config' const TokenKey = Config.TokenKey; export function getToken() { return Cookies.get( TokenKey + sessionStorage.getItem( 'username' ) ) } export function setToken( token, rememberMe, username ) { if ( rememberMe ) { return Cookies.set( TokenKey + username, token, { expires: Config.tokenCookieExpires } ) } else { return Cookies.set( TokenKey + username, token ) } } export function removeToken( username ) { return Cookies.remove( TokenKey + username ) }
页面刷新前存储用户名
window.addEventListener("beforeunload", () => { sessionStorage.setItem("username", this.user.username || ""); });
到此这篇关于vue同一浏览器登录多账号处理的文章就介绍到这了,更多相关vue同一浏览器登录多账号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
vue3+高德地图只展示指定市、区行政区域的地图以及遮罩反向镂空其他地区
vue大屏项目开发,客户觉得地图上的文字标注太多了,要求地图上只显示省市等主要城市的标注,这篇文章主要给大家介绍了关于vue3+高德地图只展示指定市、区行政区域的地图以及遮罩反向镂空其他地区的相关资料,需要的朋友可以参考下2024-02-02Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
vue中v-if 和v-else-if在页面加载的时候,不满足条件的标签会加载然后再消失掉,如果要解决这个问题,下面小编给大家带来了实例代码,需要的朋友参考下吧2018-10-10vue2.0的计算属性computed和watch的区别及各自使用场景解读
这篇文章主要介绍了vue2.0的计算属性computed和watch的区别及各自使用场景,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-01-01
最新评论