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

token设计:

随机字符串1+用户名+用户ID+登录IP+登录时间+随机字符串2
randomSecret+","+username+”,”+userId+”,”+IP+”,”+loginTime+","+randomSecret

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

redis存储K-V:

	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,进行比对或者删除即可。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值