vue同一浏览器登录多账号处理方案

 更新时间:2024年01月19日 11:53:44   作者:九段刀客  
项目在线上会遇到管理员类似权限比较大的用户,会在同一浏览器登陆多个账号,遇到这样的问题如何处理呢,下面小编给大家介绍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分别登录AB两个账号

问题描述

用户登录会在缓存中存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同一浏览器登录多账号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue $mount 和 el的区别说明

    vue $mount 和 el的区别说明

    这篇文章主要介绍了vue $mount 和 el的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue中使用装饰器的方法详解

    Vue中使用装饰器的方法详解

    装饰器是一种与类相关的语法糖,用来包装或者修改类或者类的方法的行为,其实装饰器就是设计模式中装饰者模式的一种实现方式,下面这篇文章主要给大家介绍了关于Vue中使用装饰器的相关资料,需要的朋友可以参考下
    2022-01-01
  • vue中路由参数传递可能会遇到的坑

    vue中路由参数传递可能会遇到的坑

    这篇文章主要给大家介绍了关于vue中路由参数传递遇到的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Vue事件符.capture的含义及用法说明

    Vue事件符.capture的含义及用法说明

    这篇文章主要介绍了Vue事件符.capture的含义及用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue中使用js-doc的案例代码

    vue中使用js-doc的案例代码

    这篇文章主要介绍了vue中使用js-doc的相关知识,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • vue最简单的前后端交互示例详解

    vue最简单的前后端交互示例详解

    这篇文章主要介绍了vue最简单的前后端交互示例详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • Vue项目中使用百度地图api的详细步骤

    Vue项目中使用百度地图api的详细步骤

    在之前的一个小项目中,用到的显示当地的地图功能,下面这篇文章主要给大家介绍了关于Vue项目中使用百度地图api的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • vue中的this.$router.push()路由传值方式

    vue中的this.$router.push()路由传值方式

    这篇文章主要介绍了vue中的this.$router.push()路由传值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue-Router基础学习笔记(小结)

    Vue-Router基础学习笔记(小结)

    这篇文章主要介绍了Vue-Router基础学习笔记(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 利用Vue3+Element-plus实现大文件分片上传组件

    利用Vue3+Element-plus实现大文件分片上传组件

    在开发中如果上传的文件过大,可以考虑分片上传,分片就是说将文件拆分来进行上传,将各个文件的切片传递给后台,然后后台再进行合并,下面这篇文章主要给大家介绍了关于利用Vue3+Element-plus实现大文件分片上传组件的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论