1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| @Override @Transactional(rollbackFor = Exception.class) public ResponseResult updateOrBindEmail(UpdateOrBindEmailDto updateOrBindEmailDto) { Long currentUserId = SecurityUtils.getUserId(); if (currentUserId == null) { return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN); }
String email = updateOrBindEmailDto.getEmail() == null ? null : updateOrBindEmailDto.getEmail().trim(); if (!StringUtils.hasText(email)) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "邮箱不能为空"); } if (!email.matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$")) { return ResponseResult.errorResult(AppHttpCodeEnum.PHONE_FORMAT_ERROR); }
String code = updateOrBindEmailDto.getCode() == null ? null : updateOrBindEmailDto.getCode().trim(); if (!StringUtils.hasText(code)) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "验证码不能为空"); }
String password = updateOrBindEmailDto.getPassword() == null ? null : updateOrBindEmailDto.getPassword().trim(); if (!StringUtils.hasText(password)) { return ResponseResult.errorResult(AppHttpCodeEnum.PASSWORD_NOT_NULL, "密码不能为空"); }
SysUser currentUser = adminUserService.getById(currentUserId); if (currentUser == null) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "用户不存在"); }
String redisKey = String.format("admin:code:%s", email); String cacheCode = redisCache.getCacheObject(redisKey); if (!StringUtils.hasText(cacheCode)) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "验证码已过期,请重新获取"); } if (!Objects.equals(cacheCode, code)) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "验证码错误"); }
if (!passwordEncoder.matches(password, currentUser.getPassword())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "密码错误"); }
LambdaQueryWrapper<SysUser> emailWrapper = new LambdaQueryWrapper<>(); emailWrapper.eq(SysUser::getEmail, email) .ne(SysUser::getId, currentUserId); SysUser existUser = adminUserService.getOne(emailWrapper); if (existUser != null) { return ResponseResult.errorResult(AppHttpCodeEnum.PHONENUMBER_EXIST, "该邮箱已被其他用户绑定"); }
LambdaUpdateWrapper<SysUser> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(SysUser::getId, currentUserId) .set(SysUser::getEmail, email); boolean update = adminUserService.update(updateWrapper); if (!update) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "绑定邮箱失败"); }
redisCache.deleteObject(redisKey); redisCache.deleteObject(String.format("admin:send:time:%s", email));
return ResponseResult.okResult(); }
|