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