手机版语雀测试


一、思路分析

登录逻辑是一个项目必不可少的功能,这个功能可以写的很简单,也可以很复杂,接下来以一个单体应用的项目分析

基本的登录逻辑流程图如下

  1. 前端填写表单,表单校验,发送登录网络请求
  2. 后端接受前端的数据
  3. 后端校验数据合法性
  4. 后端查询数据库,看数据是否存在
  5. 后端校验密码合法性
  6. 业务逻辑处理,生成 token,timestamp 等
  7. 登录成功

一段登陆逻辑的思考🤔 - 图1

二、代码实现

  1. public Result<Object> login(LoginDto dto) {
  2. if (dto == null || StringUtils.isNullOrEmpty(dto.getUsername()) || StringUtils.isNullOrEmpty(dto.getPassword())) {
  3. return new Result<>(ResultEnums.PARAMS_NULL.getCode(),ResultEnums.PARAMS_NULL.getMsg());
  4. }
  5. User userDto = userMapper.selectOne(new QueryWrapper<User>().eq("username", dto.getUsername()).eq("denied", BeatManEnums.ACCOUNT_ALLOW.getCode()));
  6. logger.info("userinfo is => {}",userDto);
  7. if (StringUtils.isNullOrEmpty(userDto)) {
  8. return new Result<>(ResultEnums.LOGIN_FAILED.getCode(),ResultEnums.LOGIN_FAILED.getMsg());
  9. }
  10. if (dto.getPassword().equals(userDto.getPassword())) {
  11. Integer accountType = userDto.getAccountType();
  12. String userId = userDto.getId();
  13. // auth 认证授权,生成 token 返回给前端 【账号还是有问题】
  14. if (accountType.equals(BeatManEnums.ACCOUNT_TYPE_ADMIN.getCode())) {
  15. // 重载 loginType
  16. StpUtil.setStpLogic(new StpLogic(BeatManEnums.ACCOUNT_TYPE_ADMIN.getMsg()));
  17. }
  18. if (accountType.equals(BeatManEnums.ACCOUNT_TYPE_USER.getCode())) {
  19. StpUtil.setStpLogic(new StpLogic(BeatManEnums.ACCOUNT_TYPE_USER.getMsg()));
  20. }
  21. StpUtil.login(userId, false);
  22. return new Result<>(ResultEnums.LOGIN_SUCCESS.getCode(),ResultEnums.LOGIN_SUCCESS.getMsg(),StpUtil.getTokenInfo());
  23. }
  24. return new Result<>(ResultEnums.USERNAME_OR_PASSWORD_NOT_CORRECT.getCode(),ResultEnums.USERNAME_OR_PASSWORD_NOT_CORRECT.getMsg());
  25. }