描述app端从登录请求到首页显示的全部流程
从浏览器发起请求访问app前端 通过nginx请求到我们app前端 在app端我们输入手机号及密码登录 发起请求到nginx nginx做一个反向代理到我们的app网关 在
app网关使用了全局过滤器做鉴权 判断token是否携带或token是否有效 以及如果是登录的话 那么就进行放行 网关会根据路由规则 请求到用户微服务 在用户微服
务中 如果是正常登录 对手机号和密码进行校验 将用户的信息存入token并返回 如果是游客登录 token = 0 返回
描述用户微服务的组成及登录业务及实现逻辑
用户微服务的组成:包含哪些类,每个类具体是做什么的?
1. LoginDto:接收用户的手机号和密码 2. 3. ApUser:用户信息表 通过手机号查询用户 判断用户是否存在
登录业务:app端如何登录,需要填写什么数据,后端登录时需要做哪些事情,需要验证什么?
1.填写用户的手机号和密码 发起请求 请求到nginx nginx反向代理到app网关 app网关做鉴权 然后根据路由规则 请求到用户微服务
2.对手机号和密码进行非空校验 只有手机号和密码不为空就为正常登录 否则就是游客登录
3.通过手机号查询用户 如果用户不存在 返回用户不存在
4.校验密码 将当前密码加盐之后加密 对比用户的密码 如果密码不一样 返回密码错误
5.将用户id加密成token 将盐和密码清空 将用户和token返回
6.如果是游客模式 直接返回token=0
实现逻辑:请求经过了哪个类的哪个方法,这个方法都做了哪些事情。
1. AuthorizeFilter类filter方法:鉴权 判断是否登录 是否携带token或token是否有效 2. 3. ApUserLoginController类login方法:控制层 接收用户的手机号和密码 调用业务层进行处理 4. 5. ApUserServiceImpl类loginf方法:业务层 校验用户的手机号和密码
自己编写用户微服务登录关键逻辑
1. @Override 2. public ResponseResult login(LoginDto dto) { 3. //1.校验用户手机号和密码 不为空就是正常登录 否则就是游客登录 4. if(!StringUtils.isBlank(dto.getPhone()) && !StringUtils.isBlank(dto.getPassword())){ 5. ApUser apUser = getOne(Wrappers.<ApUser>lambdaQuery().eq(ApUser::getPhone, dto.getPhone())); 6. //1.1判断用户是否存在 7. if(apUser == null){ 8. return ResponseResult.errorResult(AppHttpCodeEnum.DATA_EXIST,"用户不存在"); 9. } 10. //1.2校验密码 11. String salt = apUser.getSalt(); 12. String password = dto.getPassword(); 13. password = DigestUtils.md5DigestAsHex((password+salt).getBytes()); 14. if(!password.equals(apUser.getPassword())){ 15. return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR); 16. } 17. //1.3返回数据 18. Map<String,Object> map = new HashMap<>(); 19. map.put("token",AppJwtUtil.getToken(apUser.getId().longValue())); 20. apUser.setSalt(""); 21. apUser.setPassword(""); 22. map.put("user",apUser); 23. return ResponseResult.okResult(map); 24. }else{ 25. //2.游客登录 26. Map<String,Object> map = new HashMap<>(); 27. map.put("token",AppJwtUtil.getToken(0l)); 28. return ResponseResult.okResult(map); 29. } 30.