✅P218_商城业务-认证服务-注册完成
2024/2/14大约 2 分钟
异常枚举
cfmall-common/src/main/java/com/gyz/common/exception/BizCodeEnum.java
异常捕获
cfmall-member/src/main/java/com/gyz/cfmall/member/controller/MemberController.java
@PostMapping(value = "/register")
public R register(@RequestBody MemberUserRegisterVo vo) {
try {
memberService.register(vo);
} catch (PhoneException e) {
return R.error(BizCodeEnum.PHONE_EXIST_EXCEPTION.getCode(), BizCodeEnum.PHONE_EXIST_EXCEPTION.getMessage());
} catch (UserNameException e) {
return R.error(BizCodeEnum.USER_EXIST_EXCEPTION.getCode(), BizCodeEnum.USER_EXIST_EXCEPTION.getMessage());
}
return R.ok();
}
远程服务接口编写
cfmall-auth-server/src/main/java/com/gyz/cfmall/feign/MemberFeignService.java
@FeignClient("cfmall-member")
public interface MemberFeignService {
/**
* 远程调用用户注册
* @param vo
* @return
*/
@PostMapping(value = "/member/member/register")
R register(@RequestBody UserRegisterVo vo);
}
远程服务调用
com.gyz.cfmall.controller.LoginController#register
@PostMapping("/register")
@ResponseBody
public String register(@Valid UserRegisterVo registerVo, BindingResult bindingResult, RedirectAttributes attributes) {
if (bindingResult.hasErrors()) {
Map<String, Object> errors = bindingResult.getFieldErrors().stream().collect(Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage));
attributes.addFlashAttribute("errors", errors);
return "redirect:http://auth.cfmall.com/reg.html";
}
//校验验证码
String code = registerVo.getCode();
//获取存入Redis里的验证码
String redisCode = stringRedisTemplate.opsForValue().get(AuthServerConstant.SMS_CODE_CACHE_PREFIX + registerVo.getPhone());
if (!StringUtils.isEmpty(redisCode)) {
//截取字符串
if (code.equals(redisCode.split("_")[0])) {
//删除验证码;令牌机制
stringRedisTemplate.delete(AuthServerConstant.SMS_CODE_CACHE_PREFIX + registerVo.getPhone());
//验证码通过,真正注册,调用远程服务进行注册
R register = memberFeignService.register(registerVo);
if (register.getCode() == 0) {
return "redirect:http://auth.cfmall.com/login.html";
} else {
//注册失败
Map<String, String> errors = new HashMap<>();
errors.put("msg", register.getData("msg", new TypeReference<String>() {
}));
attributes.addFlashAttribute("errors", errors);
return "redirect:http://auth.cfmall.com/reg.html";
}
} else {
//效验出错回到注册页面
Map<String, String> errors = new HashMap<>();
errors.put("code", "验证码错误");
attributes.addFlashAttribute("errors", errors);
return "redirect:http://auth.cfmall.com/reg.html";
}
} else {
//校验出错回到注册页面
Map<String, String> errors = new HashMap<>();
errors.put("code", "验证码错误");
attributes.addFlashAttribute("errors", errors);
return "redirect:http://auth.cfmall.com/reg.html";
}
}
注册页错误消息提示
reg.html
测试
TODO
- [x] 解决BUG:在注册失败后不会跳转到注册界面,而是页面弹出
http://auth.cfmall.com/reg.html
字符串 - [X] 由于阿里云短信条数限制,注册用户待测