如何限制一个账号只在一处登陆

大家好,我是广漂程序员DevinRock!

1. 需求分析

前阵子,和问答群里一个前端朋友,随便唠了唠。期间他问了我一个问题,让我印象深刻。

他问的是,限制同一账号只能在一处设备上登录,是如何实现的?并且,他还把这个功能称为“单点登录”。

我说这不叫“单点登录”,这是“单设备登录”。

于是,当时对此概念区分不清的他,和我在语言上开始了深度纠缠。

所以在后面我就想,这个功能问题有必要整理一下,分享给现在还不清楚两者概念的朋友们。

9a30abf1c5bf4d9db85486cb1d3460cc.png

 

2. 功能实现

先聊聊“单点登录”和“单设备登录”区别,再说说实现“单设备登录”的步骤。

2.1 单点登录和单设备登录的区别

“单点登录”和“单设备登录”是两个完全不同的概念。

单设备登录指:在某个给定的时间,同一用户只能在一台设备上进行登录,如果在其他设备上尝试登录,先前的会话将被中断或注销。

单点登录(简称SSO)指:允许用户使用一组凭据(如用户名和密码)登录到一个系统,然后可以在多个相关系统中,无需重新登录即可访问受保护的资源。

关于“单点登录”的实现,这里简单说一下。一般有两种方式:若后端处理,部署一个认证中心,这是标准做法;若前端处理,可以用LocalStorage做跨域缓存。

2.2 单设备登录的实现

要实现单设备登录,一般来说,有两种方式:使用数据库记录登录状态 和 使用令牌验证机制 。

使用令牌验证机制 的实现步骤如下:

• 用户登录时生成token,将账号作为key,token作为value,并设置过期时间存入redis中。

• 当用户访问应用时,在拦截器中解析token,获取账号,然后用账号去redis中获取相应的value。

• 如果获取到的value的token与当前用户携带的token一致,则允许访问;如果不一致,则提示前端重复登录,让前端清除token,并跳转到登录页面。

• 当用户在另一台设备登录时,其token也会存入redis中,这样就刷新了token的值和redis的过期时间。

b71b6d7a40094ce9acb7dd51bec15f3f.png

 

使用数据库记录登录状态 的实现步骤如下:

• 在用户登录时,记录用户的账号信息、登录设备的唯一标识符(如设备ID或IP地址)以及登录时间等信息到数据库中的一个登录表。

• 每次用户的登录请求都会查询数据库中的登录表,检查是否存在该用户的登录记录。如果存在记录,则比对登录设备的标识符和当前设备的标识符是否相同。

• 如果当前设备与登录设备不匹配,拒绝登录并提示用户在其他设备上已登录。若匹配,则更新登录时间。

• 当用户主动退出登录或超过一定时间没有操作时,清除该用户的登录记录。

40526a2783fb4057b67b72c55ac6029d.png

 

结语

建立这个平台的初衷:

  • 打造一个专注于前端功能问题的问答平台,让大家高效搜索处理同样问题。
  • 通过不断积累问题,一起练习逻辑思维,并顺便学习相关知识点。
  • 遇到有共鸣的问题,与众多同行朋友们一起讨论,一起沉淀成长。
  • 为了给功能问题专栏添加乐趣,增设技术资讯、实用干货两个新专栏。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424999.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue中如何实现动态路由?

在前端开发中,Vue.js 是一个极为流行的 JavaScript 框架,提供了灵活性和易用性,使得开发者可以快速构建单页面应用(SPA)。在 Vue 中,我们经常需要处理动态路由的情况,比如根据用户的操作或者权限…

Linux——进程控制(二)进程等待

目录 前言 一、进程等待 二、如何进行进程等待 1.wait 2.waitpid 2.1第二个参数 2.2第三个参数 3. 等待多个进程 三、为什么不用全局变量获取子进程的退出信息 前言 前面我们花了大量的时间去学习进程的退出,退出并不难,但更深入的学习能为本…

IPC资源在linux内核中如何管理

1.先看各个通信的接口 1.共享内存接口 2.消息队列接口 3.信号量接口 2.管理他们的结构体: 其实管理他们的是一个数组,和open返回的fd差不多,shmid,msqid,semid的大小都是这个数组的下标。那数组的结构是什么呢? 然后…

UniApp项目处理小程序分包

目前 uniApp也成为一种 App端开发的大趋势 因为在目前跨端 uniApp可以说相当优秀 可以同时兼容 H5 PC 小程序 APP 的技术 目前市场屈指可数 那么 说到微信小程序 自然就要处理分包 因为微信小程序对应用大小限制非常铭感 限制在2MB 超过之后就会无法真机调试与打包 不过需要注…

前端学习第四天-css提升

达标要求 掌握css复合选择器 块级元素和行内元素及行内块的区别? 哪些元素是块元素,行内元素及行内块元素? 熟练掌握display的用法 能够说出css三大特性 熟练运用背景样式 1. CSS复合选择器 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的…

使用 Docker 部署 MrDoc 在线文档管理系统

1)MrDoc 介绍 MrDoc 简介 MrDoc 觅思文档:https://mrdoc.pro/ MrDoc 使用手册:https://doc.mrdoc.pro/p/user-guide/ MrDoc 可以创建各类私有化部署的文档应用。你可以使用它进行知识管理、构建团队文库、制作产品手册以及在线教程等。 Mr…

抖音视频批量采集软件|视频评论下载工具

在日常工作中,需要频繁下载抖音视频,但逐个复制分享链接下载效率太低?别担心!我们推出了一款专业的抖音视频批量采集软件,基于C#开发,满足您的需求,让您通过关键词搜索视频并自动批量抓取&#…

Zookeeper学习2:原理、常用脚本、选举机制、监听器

文章目录 原理选举机制(重点)情况1:正常启动集群情况2:集群启动完,中途有机器挂了 监听器客户端向服务端写入数据客户端向服务端Leader节点写入客户端向服务端Follower节点写入 Paxos算法(每个节点都可以提…

Dynamo幕墙探究系列(四)——Revolve

我们先放一张截图,不再是通过 loft 创建模型,而是通过旋转生成模型,效果如下,今天我们就来聊聊这个模型是怎么生成得。 “旋转”,顾名思义,和 Revit 中创建形状的旋转是一个意思,只是用来旋转的…

【MATLAB】 CEEMDAN信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码,请转文末观看代码获取方式~ 展示出图效果 1 CEEMDAN信号分解算法 CEEMDAN 分解又叫自适应噪声完备集合经验模态分解,英文全称为 Complete Ensemble Empirical Mode Decomposition with Adaptive Noise。 CEEMDAN是对CEEMD的进一步改进…

MySQL 教程 2.4

MySQL UNION 操作符 本教程为大家介绍 MySQL UNION 操作符的语法和实例。 描述 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合,并去除重复的行。 UNION 操作符必须由两个或多个 SELECT 语句组成,每个 SELECT 语句的列数…

蓝桥杯倒计时 41天 - KMP 算法

KMP算法 KMP算法是一种字符串匹配算法,用于匹配模式串P在文本串S中出现的所有位置。 例如S“ababac,P“aba”,那么出现的所有位置是13。 在初学KMP时,我们只需要记住和学会使用模板即可,对其原理只需简单理解&#xff…

会员丨这些年开的会员

1、淘宝88VIP-88元/年 要说现在最实惠的会员,肯定是88vip莫属了。88元/年即可拥有: 优酷/芒果年卡; 饿了么年卡(每月4张吃货卡,但现在饿了么改的越来越不实惠了); 网易云音乐年费会员&#xf…

NACOS在Windows和Linux下的安装教程

目录 1、Windows安装 1.1、下载安装包 1.2、解压 1.3、端口配置 1.4、启动 1.5、访问 2、Linux安装 2.1、安装JDK 2.2、上传安装包 2.3、解压 2.4、端口配置 2.5、启动 3、Nacos的依赖 1、Windows安装 开发阶段采用单机安装即可。 1.1、下载安装包 在Nacos的Git…

【Python】进阶学习:pandas--query()用法详解

📚【Python】进阶学习:pandas–query()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希…

open-spider开源爬虫工具:抖音数据采集

在当今信息爆炸的时代,网络爬虫作为一种自动化的数据收集工具,其重要性不言而喻。它能够帮助我们从互联网上高效地提取和处理数据,为数据分析、市场研究、内容监控等领域提供支持。抖音作为一个全球性的短视频平台,拥有海量的用户…

行业独角兽—Matic Network来临,成就百万富翁的项目!

Matic Network由印度Bangalore及日本超级节点打造 ,独创保险仓九仓共振循环模式。 Mtc于2023年初完成了700万美元的种子轮融资, Paradigm领投,a16z、Variant、Solana Ventures和Jump Crypto参投,旨在全方位布局Web3.0的去中心化生…

Java基础数据结构之栈

一.什么是栈 栈是一种特殊的线性表,它只允许在固定的一端进行元素的添加与使用,且遵循先进后出的原则。添加取用元素的一端称为栈顶,另一端称为栈底。出栈和入栈都是操作栈顶元素 二.栈的模拟实现 栈的底层是一个数组 这是里面的成员变量以…

element-ui的 Dialog 对话框背景图片

element-ui的 Dialog 对话框背景图片 效果如图&#xff1a; 代码&#xff1a; &#xff01;&#xff01;&#xff01;注&#xff1a;如果style里有scoped"scoped"会不生效&#xff0c;要单独写个<style></style> <style> .bgc {/* 弹窗样式 */.e…

7.1.1 selenium介绍及安装chromedriver

目录 1. Selenium的用途 2. 安装Selenium库 3. 安装chromedriver 1. 查看谷歌版本号​编辑 2. 找到最新版本及下载 3. 配置环境变量 4. 检测是否配置成功 5. 用python初始化浏览器对象检测&#xff1a; 6. 参考链接 1. Selenium的用途 在前面我们提到&#xff1a;在我…