陌生人交友用户登录相关总结
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绑定存储到数据库,每次登录的时候,需要查询这个绑定信息。

浙公网安备 33010602011771号