陌生人交友用户登录相关总结

1.确认表模型:用户基础表(tb-user)

用户详情表

2.思路分析:

2.1:用户登录使用手机号和验证码登录

2.1.1:发送验证码使用阿里云短信平台(要花钱的),并且将验证码存入redis中(存入时加入过期时间设置)

2.2:验证码验证成功后

2.2.1判断手机号是否存在(判断是否是新用户),不存在添加手机号到用户基础表中密码直接默认值123456即可

2.2.2注册环信用户(用于即时通信的服务),然后将环信账号密码存入用户基础表中(环信的账号密码是我们自己设置的用户是不知情的)

2.2.3将注册或者登录的动作记录发送给mq(这里我用的是rebbitmq)(主要用于记录用户行为好方便统计每日增长之类的)

2.2.4根据手机号和用户id生成jwt令牌,将jwt令牌传给前端

基于token的登录和认证:

登录:手机号+验证码( 随机数如何生成的RandomStringUtils【apache的commons工具包】+短信平台+存在哪【redis 5min   key : "CHECK_CODE_"+phone】 )

      输入验证码之后的登录:jwt生成token令牌(

加密算法【HS512】+

载荷部分存的什么内容【用户id和手机号】+

令牌的有效时间【1小时】)

      包含的逻辑:首次登录(完善个人信息【包括注册环信账号】+上传头像

【

Oss云存储 : 阿里云

+

人脸识别:百度智能云】)

2.3验证码验证失败直接抛出异常留给统一异常处理

2.4

登录校验:现在网关进行判断token是否有效

具体的每个后台服务中通过Springmvc的拦截器:获取jwt载荷部分内容,封装用户对象,存入ThreadLocal本地线程。  

备注:

1、 探花用户登录设置jwt过期时间1小时,如果用户一直在操作,那么1小时到了用户是否是需要重新登录,用户体验不好,如何解决?这个也是面试常问问题?

1小时过期: 连续的1小时内,用户未操作!!

 

思路1:操作  发送请求   更新token【刷新下token时间】:重新生成一个token,替换原来的。

频率无法控制:影响性能+安全性降低

思路2:检查token过期时间【claims.getExpiration()】,快过期(30s)了,在更新token:重新生成一个token,替换原来的。

缺点:每次都要检查过期时间,影响性能

 

思路3:双token刷新机制è  token【令牌】   +   refreshToken【刷新令牌】

token【1小时】  +   refreshToken【2小时】 在前端保存【localStorage】!

每次请求token ====> 1小时之内  :木问题

                     1小时之后 :ExpiredException【token过期异常】

 前端获取这个异常信息之后,重新发送一个刷新令牌的请求【token+refreshToken】==》token过期  + refreshToken【正常】 ==> 重新生成并发送token+refreshToken   ===> 更新原来的token和refreshToken  ===> 过期时间是不是重新计算

                    1小时 – 2小时范围内

                    2小时之后: 都过期。 正常请求,携带token。Token过期,发送刷新令牌的请求,refreshToken 不能用。不能使用!!

 

2、 探花是否允许一个账号同时在多台设备同时登录,如何控制?

不允许!!!: 设备id ===> 登录的时候,传递给后台 ===> 将登录的手机号和设备id绑定存储到数据库,每次登录的时候,需要查询这个绑定信息。

 

posted @ 2022-04-29 14:20  续写兰亭  阅读(121)  评论(0)    收藏  举报