当前位置: 首页 > news >正文

后台管理系统用户退出登录方案实现

退出登录一直是一个通用的前端实现方案,对于退出登录而言,它的触发时机一般有两种:

1. 用户主动退出,即用户点击登录按钮之后退出;

2. 用户被动退出,Token过期或被 其他人"顶下来" 时退出;

那么无论是什么退出方式,在用户退出时,所需要执行的操作都是固定的:

1. 清理掉当前用户缓存数据;

2. 清理掉权限相关配置;

3. 返回到登录页;

1.用户主动退出策略

1. 在状态管理中添加action

2. 添加退出登录事件

2. 用户被动退出策略

用户被动退出的情况一般是指token过期或者系统需要满足单点登录,相应的可以分为前端主动处理和前端被动处理两种方式。

2.1. 被动退出前端主动处理

想要搞明白 主动处理 方案,那么首先我们得先去搞明白对应的背景以及业务逻辑 。

那么首先我们先明确一下对应的背景:

我们知道 token 表示了一个用户的身份令牌,对 服务端 而言,它是只认令牌不认人的。所以说一旦其他人获取到了你的 token ,那么就可以伪装成你,来获取对应的敏感数据。

所以为了保证用户的信息安全,那么对于 token 而言就被制定了很多的安全策略,比如:

1.动态 token(可变 token)
2.刷新 token
3. 时效 token

这些方案各有利弊,没有绝对的完美的策略,而一般所选择的方案就是时效 token。

对于 token 本身是拥有时效的,这个大家都知道。但是通常情况下,这个时效都是在服务端进行处理,而此时我们要在 服务端处理 token 时效的同时,在前端主动介入 token 时效的处理中,从而保证用户信息的更加安全性。

那么对应到我们代码中的实现方案为:

1. 在用户登陆时,记录当前 登录时间;

2. 制定一个 失效时长;

3. 在接口调用时,根据当前时间对比登录时间 ,看是否超过了时效时长;

(1). 如果未超过,则正常进行后续操作

(2). 如果超过,则进行退出登录操作

那么明确好了对应的方案之后,接下来我们就去实现对应代码。

创建 utils/auth.js 文件,并写入以下代码:

以下是在stotage中的代码:

以下是在constant 中声明对应常量:

在用户登录成功之后去设置时间,到 store/user.js 的 login 中:

在 utils/request 对应的请求拦截器中进行主动介入:

2.2. 被动退出前端被动处理

首先我们需要先明确被动处理需要应对两种业务场景:

我们一个一个看,首先是Token过期:

我们知道对于 token 而言,本身就是具备时效的,这个是在服务端生成 token 时就已经确定的。

而此时我们所谓的 token 过期指的就是:

服务端生成的 token 超过 服务端指定时效 的过程。

而对于单点登录而言,指的是:

当用户 A 登录之后,token 过期之前。

用户 A 的账号在其他的设备中进行了二次登录,导致第一次登录的 A 账号被 “顶下来” 的过程。

即:同一账户仅可以在一个设备中保持在线状态

那么明确好了对应的背景之后,接下来我们来看对应的业务处理场景:

从背景中我们知道,以上的两种情况,都是在服务端进行判断的,而对于前端而言其实是服务端通知前端的一个过程。

所以说对于其业务处理,将遵循以下逻辑:

1. 服务端返回数据时,会通过特定的状态码通知前端;

2. 当前端接收到特定状态码时,表示遇到了特定状态:token 时效 或 单点登录;

3. 此时进行退出登录处理;

那么明确好了业务之后,接下来我们来实现对应代码:

在 utils/request 的响应拦截器中,增加以下逻辑:

对于单点登录而言,需要配合websockt通信,让后端主动推送消息给前端,前端收到该通知后主动退出,其原理是一样的,此处不再赘述。


http://www.mrgr.cn/news/82660.html

相关文章:

  • Ubuntu22.04配置静态ip
  • Laravel操作ElasticSearch
  • 自定义Bitmap
  • Android使用DataBinding和Merge引发的血案
  • 初步了解MindScience里的MindSpore SPONGE框架(启智社区平台安装未成功)
  • 建造者设计模式学习
  • 4进货+后台事务
  • Kubernetes Gateway API-3-TLS配置
  • 如何在 Hive SQL 中处理复杂的数据类型?
  • 安卓触摸对焦
  • 如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
  • 如何使用 Ansys OptiSlang 同时运行多个参数化设计研究
  • 当今世界如何减少暴戾之气和矛盾纷争
  • 【Rust自学】10.5. 生命周期 Pt.1:生命周期的定义与意义、借用检查器与泛型生命周期
  • Linux 基础七 内存
  • 修改secure-file-priv参数-mysql5.7.26限制不允许导入或导出的解决方法
  • GNU链接器简介-2
  • Ubuntu 下载安装 Consul1.17.1
  • Branch-Solve-Merge Improves Large Language Model Evaluation and Generation
  • 高中数学部分基础知识
  • 【51单片机零基础-chapter4:LED数码管】
  • 【51单片机零基础-chapter2:灯独立点亮,自定义点亮,跑马灯点亮,函数】
  • 1.1.3 插入排序
  • GNU链接器简介
  • MAC环境安装(卸载)软件
  • 数据结构C语言描述8(图文结合)--哈希、哈希冲突、开放地址法、链地址法等实现