注册登录功能开发设计思路

注册登录功能开发设计思路

案例地址:gx_sso_demo: 登录注册案例 springboot+jwt+mybatis-plus密码加盐加密+验证码注册登录+密码注册登录 (gitee.com)

手机验证码注册

  • 注册需验证身份,防止大量虚假用户涌入(短信验证方式)

  • 短信因三方需付费,所以做好防刷,常见限制IP限制,单个ip一天不能注册超过五个,单个手机号最多每天接收三次验证码,单个验证码5分钟有效,验证码每分钟只能发一次,

    • redis实现,记录key ip 自增控制ip次数

    • redis key为手机号 ,value记录验证码同时记录当前时间戳,用于验证是否一分钟内多次请求,

    • 短信验证码发送接口,第一部判断的就是有没有发过,没发过直接发,发过则判定上次时间戳,是否在一分钟内,因为前端虽然能倒计时,如果直调接口你怎么控,所以后端也做校验

    • reids五分钟有效,使用key超时机制即可

    • 因为验证码我们redis中已经存在,所以直接拿前端提交的验证码,跟redis中的验证码对比即可,如果reids不存在说明假的验证码,如果对比不相等证明也是假的验证码

  • 验证码验证成功保存用户注册信息,给用户默认密码,默认密码不在加密,没意义,对用户标记新用户,对于标记是否为新用户的,首次登录需重置密码,取消新用户标记

登录

  • 验证码登录方式验证逻辑跟注册类似

  • 密码登录

    • 前端会提交给我们用户名密码,根据用户名首先校验用户是否存在

    • 存在则判定是否新用户,如果新用户直接对比提交过来的密码跟数据库对比

    • 如果不是新用户,根据自己入库的加密规则对前端传过来的密码进行加密之后对比加密后密码

    • 密码验证成功生成jwt token存放用户id,并且将用户id存入redis用于做登录失效下线,用户续命,因为jwt续命,用jwt自带失效也行,比较麻烦,如果是框架鉴权方式,遵循框架即可,最终将登陆信息返回给前端

    • 其他接口鉴权,取出用户身份令牌,解析用户id,有用户id就有权限,具体权限直接查mysql还是redis做了缓存多无所谓,可以使用aop,拦截器,过滤器,鉴权成功,用户有效则放行,并将用户信息存入本地线程,用于业务内部使用

  • 注意:无论是短信还是密码方式返回前端登录成功信息时候都需要返回用户是否新用户标记,前端根据标记跳转是否修改密码,修改密码此时就需要加密了,跟登录的加密是相同算法

  • 微服务情况下,网关进行的鉴权,鉴权成功,将用户id请求头携带,路由到对应服务即可,鉴权失败401

  • 对应服务拦截解析路由过来的id,查询用户信息(可能在缓存中,可能调用户服务拿,无所谓),保存本地线程即可

posted @ 2022-04-01 16:24  赶星而至  阅读(381)  评论(0编辑  收藏  举报