首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >前后分离 redis实现单用户登录限制(用户仅可以在一处登录)

前后分离 redis实现单用户登录限制(用户仅可以在一处登录)

作者头像
devi
发布于 2021-08-19 14:57:42
发布于 2021-08-19 14:57:42
1.7K0
举报
文章被收录于专栏:搬砖记录搬砖记录

token设计:

代码语言:javascript
复制
随机字符串1+用户名+用户ID+登录IP+登录时间+随机字符串2
randomSecret+","+username+”,”+userId+”,”+IP+”,”+loginTime+","+randomSecret

随机字符串1=encode(IP+LoginTime) 随机字符串2=encode(随机字符串1)

redis存储K-V:

代码语言:javascript
复制
	key:username+”,”+id
	value: ip+”,”+loginTime+","+randomSecret

关键点:

  1. redis的key必须可确定,容易获取,才能保证校验(通过username+id实现)
  2. 返回前端的token必须具有随机性(添加randomSecret,由IP+时间生成,时间不定,则每次不一样)

登录实现:

  1. 前端传参username,password;
  2. 通过username查出user,得到userId和加密密码;
  3. 初始化boolean flag=false,构造key:username+”,”+id,在redis中查询记录,若成功查到结果(即ip+loginTime+randomSecret),则解析字符串,将ip和loginTime放在一个map中,设置flag=true;
  4. 密码比对,若比对成功,构建token,然后判断flag,若为true,将token加到map中,并添加提示语,再将map返回,若为false,则直接返回token。

此时前端能够拿到用户上一次的登录信息,根据业务需求做动态处理。

token只需要对前端加密,redis中的信息可以明文存储。

token验证与注销

拿到token解密得到username+id+ip+time,拆分得到key,查询value,进行比对或者删除即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 登录实现:
  • token验证与注销
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档