前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【黑马头条训练营】day01-黑马头条整体构成与App登录

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

作者头像
陶然同学
发布2023-03-16 13:43:29
2450
发布2023-03-16 13:43:29
举报
文章被收录于专栏:陶然同学博客陶然同学博客

目录

描述app端从登录请求到首页显示的全部流程

描述用户微服务的组成及登录业务及实现逻辑

自己编写用户微服务登录关键逻辑

描述app端从登录请求到首页显示的全部流程

从浏览器发起请求访问app前端 通过nginx请求到我们app前端 在app端我们输入手机号及密码登录 发起请求到nginx nginx做一个反向代理到我们的app网关 在

app网关使用了全局过滤器做鉴权 判断token是否携带或token是否有效 以及如果是登录的话 那么就进行放行 网关会根据路由规则 请求到用户微服务 在用户微服

务中 如果是正常登录 对手机号和密码进行校验 将用户的信息存入token并返回 如果是游客登录 token = 0 返回

描述用户微服务的组成及登录业务及实现逻辑

用户微服务的组成:包含哪些类,每个类具体是做什么的?

代码语言:javascript
复制
LoginDto:接收用户的手机号和密码

ApUser:用户信息表 通过手机号查询用户 判断用户是否存在

登录业务:app端如何登录,需要填写什么数据,后端登录时需要做哪些事情,需要验证什么?

1.填写用户的手机号和密码 发起请求 请求到nginx nginx反向代理到app网关 app网关做鉴权 然后根据路由规则 请求到用户微服务

2.对手机号和密码进行非空校验 只有手机号和密码不为空就为正常登录 否则就是游客登录

3.通过手机号查询用户 如果用户不存在 返回用户不存在

4.校验密码 将当前密码加盐之后加密 对比用户的密码 如果密码不一样 返回密码错误

5.将用户id加密成token 将盐和密码清空 将用户和token返回

6.如果是游客模式 直接返回token=0

实现逻辑:请求经过了哪个类的哪个方法,这个方法都做了哪些事情。

代码语言:javascript
复制
AuthorizeFilter类filter方法:鉴权 判断是否登录 是否携带token或token是否有效

ApUserLoginController类login方法:控制层 接收用户的手机号和密码 调用业务层进行处理
    
ApUserServiceImpl类loginf方法:业务层 校验用户的手机号和密码

自己编写用户微服务登录关键逻辑

代码语言:javascript
复制
@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);
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 描述app端从登录请求到首页显示的全部流程
  • 描述用户微服务的组成及登录业务及实现逻辑
  • 自己编写用户微服务登录关键逻辑
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档