【黑马头条训练营】day01-黑马头条整体构成与App登录

发布于:2025-02-11 ⋅ 阅读:(72) ⋅ 点赞:(0)

目录

描述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);
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到