基于Vue框架的web项目实现同一个浏览器仅能同时登录一个账号的方法
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
·
1、同一个浏览器仅能同时登录一个账号的场景
- 基于Vue框架的web项目需要实现同一个浏览器只允许登录一个账号,即如果已经在浏览器上登录了用户A,在该浏览器上新建一个窗口(即新打开一个标签页)打开项目,登录用户B,然后用户A会自动退出。
2、同一个浏览器同时登录多个账号存在的问题
- 因为在同一个浏览器同时登录多个账号很容易造成“同时登录的这几个账号的数据错乱”,导致数据不安全。
- 例如:如果同一个浏览器允许登录多个账号,用户A(权限少,普通用户)登录自己的账号,用户B(权限多,超级管理员)在用户A的电脑上同时登录自己的账号,用户B使用完后关闭自己的标签页,用户A刷新页面后,显示的是用户B的账号,这样用户A就可以操作用户B账号的内容,存在严重的安全隐患。
3、同一个浏览器仅能同时登录一个账号的实现方法
- 通过监听本地存储的字段用户id(常用userId表示)的变化来确定是否在同一个浏览器同时登录了不同账号。
- 因为userId一定是唯一的,如果监听到本地存储的userId的值发生改变,则表示在该浏览器有新账户登录,即,在已经有账户A登录的情况下,在该浏览器又登录了一个B账号,所以强制账户A退出登录,通过让账户A跳转至登录页面实现账户A的退出登录。
- 实现步骤如下:
- 首先,在账户A登录成功后,在登录页面login.vue页面使用localStorage将userId存储在本地。
localStorage.setItem('userId',userInfo.userId)
- 然后,在App.vue里的created方法中监听userId的变化,如果监听到userId发生变化,就强制旧userId值对应的账户A退出登录。
<template>
<div>
<router-view>
</router-view>
</div>
</template>
<script>
export default {
created() {
window.addEventListener('storage', res => {
if (res.key === 'userId') {
this.$router.push(`/Login`)
}
})
}
}
</script>
<style>
@import "../main.css"
</style>
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
9e887079
[skip ci] 1 年前
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)