diff --git a/itbaima-monitor-server/src/main/java/com/example/controller/AuthorizeController.java b/itbaima-monitor-server/src/main/java/com/example/controller/AuthorizeController.java index 1c6cfc9..1f9f217 100644 --- a/itbaima-monitor-server/src/main/java/com/example/controller/AuthorizeController.java +++ b/itbaima-monitor-server/src/main/java/com/example/controller/AuthorizeController.java @@ -38,7 +38,7 @@ public class AuthorizeController { @GetMapping("/ask-code") @Operation(summary = "请求邮件验证码") public RestBean askVerifyCode(@RequestParam @Email String email, - @RequestParam @Pattern(regexp = "(reset)") String type, + @RequestParam @Pattern(regexp = "(reset|modify)") String type, HttpServletRequest request){ return this.messageHandle(() -> accountService.registerEmailVerifyCode(type, String.valueOf(email), request.getRemoteAddr())); diff --git a/itbaima-monitor-server/src/main/java/com/example/controller/UserController.java b/itbaima-monitor-server/src/main/java/com/example/controller/UserController.java index 08690ff..7ed822f 100644 --- a/itbaima-monitor-server/src/main/java/com/example/controller/UserController.java +++ b/itbaima-monitor-server/src/main/java/com/example/controller/UserController.java @@ -3,6 +3,7 @@ package com.example.controller; import com.example.entity.RestBean; import com.example.entity.vo.request.ChangePasswordVO; import com.example.entity.vo.request.CreateSubAccountVO; +import com.example.entity.vo.request.ModifyEmailVO; import com.example.entity.vo.response.SubAccountVO; import com.example.service.AccountService; import com.example.utils.Const; @@ -26,6 +27,17 @@ public class UserController { RestBean.success() : RestBean.failure(401, "原密码输入错误!"); } + @PostMapping("/modify-email") + public RestBean modifyEmail(@RequestAttribute(Const.ATTR_USER_ID) int id, + @RequestBody @Valid ModifyEmailVO vo) { + String result = service.modifyEmail(id, vo); + if(result == null) { + return RestBean.success(); + } else { + return RestBean.failure(401, result); + } + } + @PostMapping("/sub/create") public RestBean createSubAccount(@RequestBody @Valid CreateSubAccountVO vo) { service.createSubAccount(vo); diff --git a/itbaima-monitor-server/src/main/java/com/example/entity/vo/request/ModifyEmailVO.java b/itbaima-monitor-server/src/main/java/com/example/entity/vo/request/ModifyEmailVO.java new file mode 100644 index 0000000..9973f36 --- /dev/null +++ b/itbaima-monitor-server/src/main/java/com/example/entity/vo/request/ModifyEmailVO.java @@ -0,0 +1,13 @@ +package com.example.entity.vo.request; + +import jakarta.validation.constraints.Email; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +@Data +public class ModifyEmailVO { + @Email + String email; + @Length(max = 6, min = 6) + String code; +} diff --git a/itbaima-monitor-server/src/main/java/com/example/listener/MailQueueListener.java b/itbaima-monitor-server/src/main/java/com/example/listener/MailQueueListener.java index d3102bd..e76d34b 100644 --- a/itbaima-monitor-server/src/main/java/com/example/listener/MailQueueListener.java +++ b/itbaima-monitor-server/src/main/java/com/example/listener/MailQueueListener.java @@ -36,6 +36,10 @@ public class MailQueueListener { createMessage("您的密码重置邮件", "你好,您正在执行重置密码操作,验证码: "+code+",有效时间3分钟,如非本人操作,请无视。", email); + case "modify" -> + createMessage("您的邮件修改验证邮件", + "您好,您正在绑定新的电子邮件地址,验证码: "+code+",有效时间3分钟,如非本人操作,请无视", + email); default -> null; }; if(message == null) return; diff --git a/itbaima-monitor-server/src/main/java/com/example/service/AccountService.java b/itbaima-monitor-server/src/main/java/com/example/service/AccountService.java index 95d29d4..9e1dfc2 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/AccountService.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/AccountService.java @@ -5,6 +5,7 @@ import com.example.entity.dto.Account; import com.example.entity.vo.request.ConfirmResetVO; import com.example.entity.vo.request.CreateSubAccountVO; import com.example.entity.vo.request.EmailResetVO; +import com.example.entity.vo.request.ModifyEmailVO; import com.example.entity.vo.response.SubAccountVO; import org.springframework.security.core.userdetails.UserDetailsService; @@ -19,4 +20,5 @@ public interface AccountService extends IService, UserDetailsService { void createSubAccount(CreateSubAccountVO vo); void deleteSubAccount(int uid); List listSubAccount(); + String modifyEmail(int id, ModifyEmailVO vo); } diff --git a/itbaima-monitor-server/src/main/java/com/example/service/impl/AccountServiceImpl.java b/itbaima-monitor-server/src/main/java/com/example/service/impl/AccountServiceImpl.java index 1ea1a7b..6432bd3 100644 --- a/itbaima-monitor-server/src/main/java/com/example/service/impl/AccountServiceImpl.java +++ b/itbaima-monitor-server/src/main/java/com/example/service/impl/AccountServiceImpl.java @@ -7,6 +7,7 @@ import com.example.entity.dto.Account; import com.example.entity.vo.request.ConfirmResetVO; import com.example.entity.vo.request.CreateSubAccountVO; import com.example.entity.vo.request.EmailResetVO; +import com.example.entity.vo.request.ModifyEmailVO; import com.example.entity.vo.response.SubAccountVO; import com.example.mapper.AccountMapper; import com.example.service.AccountService; @@ -161,6 +162,21 @@ public class AccountServiceImpl extends ServiceImpl impl }).toList(); } + @Override + public String modifyEmail(int id, ModifyEmailVO vo) { + String code = getEmailVerifyCode(vo.getEmail()); + if (code == null) return "请先获取验证码"; + if(!code.equals(vo.getCode())) return "验证码错误,请重新输入"; + this.deleteEmailVerifyCode(vo.getEmail()); + Account account = this.findAccountByNameOrEmail(vo.getEmail()); + if(account != null && account.getId() != id) return "该邮箱账号已经被其他账号绑定,无法完成操作"; + this.update() + .set("email", vo.getEmail()) + .eq("id", id) + .update(); + return null; + } + /** * 移除Redis中存储的邮件验证码 * @param email 电邮 diff --git a/itbaima-monitor-web/src/views/main/Security.vue b/itbaima-monitor-web/src/views/main/Security.vue index a34a6ec..80b1e82 100644 --- a/itbaima-monitor-web/src/views/main/Security.vue +++ b/itbaima-monitor-web/src/views/main/Security.vue @@ -1,6 +1,6 @@