From 80dc8a0c077fc59cfb4ae7cb1db6ddb66e6faae2 Mon Sep 17 00:00:00 2001 From: OpenCode Date: Thu, 23 Jul 2026 13:41:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E9=82=AE=E7=AE=B1?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8A=9F=E8=83=BD=EF=BC=88=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E3=80=81=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=82=AE=E7=AE=B1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserInfoService 新增 sendEmailCodeForRegister、sendEmailCodeForUpdateEmail、checkEmailCode 方法 - 三种场景使用不同缓存前缀区分: - 注册:email_code_register:{email} - 修改密码:email_code:{userId} - 修改邮箱:email_code_update_email:{userId} - AppUserLoginController 新增 /sendEmailCodeForRegister 公开接口 - AppUserInfoController 新增 /sendEmailCodeForUpdateEmail 接口 - /bindEmail、/updateEmail、/updatePassword 增加验证码验证 --- .../controller/app/AppUserInfoController.java | 17 +++++- .../app/AppUserLoginController.java | 20 +++++++ .../modules/user/service/UserInfoService.java | 10 +++- .../service/impl/UserInfoServiceImpl.java | 55 ++++++++++++++++--- 4 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java b/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java index 2b1729f..d4d8059 100644 --- a/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java +++ b/src/main/java/com/cool/modules/user/controller/app/AppUserInfoController.java @@ -44,7 +44,7 @@ public class AppUserInfoController { ); } - @Operation(summary = "发送邮箱验证码") + @Operation(summary = "发送邮箱验证码(修改密码)") @PostMapping("/sendEmailCode") public R sendEmailCode() { Long userId = CoolSecurityUtil.getCurrentUserId(); @@ -52,6 +52,15 @@ public class AppUserInfoController { return R.ok(); } + @Operation(summary = "发送邮箱验证码(修改邮箱)") + @PostMapping("/sendEmailCodeForUpdateEmail") + public R sendEmailCodeForUpdateEmail(@RequestAttribute JSONObject requestParams) { + Long userId = CoolSecurityUtil.getCurrentUserId(); + String email = requestParams.getStr("email"); + userInfoService.sendEmailCodeForUpdateEmail(userId, email, emailSendService); + return R.ok(); + } + @Operation(summary = "更新用户密码") @PostMapping("/updatePassword") public R updatePassword( @@ -84,7 +93,8 @@ public class AppUserInfoController { @PostMapping("/bindEmail") public R bindEmail(@RequestAttribute JSONObject requestParams) { String email = requestParams.getStr("email"); - userInfoService.bindEmail(CoolSecurityUtil.getCurrentUserId(), email); + String code = requestParams.getStr("code"); + userInfoService.bindEmail(CoolSecurityUtil.getCurrentUserId(), email, code); return R.ok(); } @@ -100,7 +110,8 @@ public class AppUserInfoController { @PostMapping("/updateEmail") public R updateEmail(@RequestAttribute JSONObject requestParams) { String email = requestParams.getStr("email"); - userInfoService.updateEmail(CoolSecurityUtil.getCurrentUserId(), email); + String code = requestParams.getStr("code"); + userInfoService.updateEmail(CoolSecurityUtil.getCurrentUserId(), email, code); return R.ok(); } } diff --git a/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java b/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java index 478aabd..781d8d9 100644 --- a/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java +++ b/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java @@ -6,10 +6,12 @@ import com.cool.core.enums.UserTypeEnum; import com.cool.core.exception.CoolPreconditions; import com.cool.core.request.R; import com.cool.modules.base.service.sys.BaseSysLoginService; +import com.cool.modules.base.service.sys.EmailSendService; import com.cool.modules.user.controller.app.params.CaptchaParam; import com.cool.modules.user.controller.app.params.LoginParam; import com.cool.modules.user.controller.app.params.RefreshTokenParam; import com.cool.modules.user.controller.app.params.SmsCodeParam; +import com.cool.modules.user.service.UserInfoService; import com.cool.modules.user.service.UserLoginService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -28,6 +30,10 @@ public class AppUserLoginController { private final BaseSysLoginService baseSysLoginService; + private final UserInfoService userInfoService; + + private final EmailSendService emailSendService; + /** * 小程序登录 */ @@ -215,11 +221,25 @@ public class AppUserLoginController { String email = param.getEmail(); String password = param.getPassword(); String nickName = param.getNickName(); + String code = param.getSmsCode(); CoolPreconditions.checkEmpty(email); CoolPreconditions.checkEmpty(password); + CoolPreconditions.checkEmpty(code); + userInfoService.checkEmailCode( + com.cool.modules.user.service.impl.UserInfoServiceImpl.getRegisterCacheKey(email), code); return R.ok(userLoginService.emailRegister(email, password, nickName)); } + @TokenIgnore + @Operation(summary = "发送邮箱验证码(注册)") + @PostMapping("/sendEmailCodeForRegister") + public R sendEmailCodeForRegister(@RequestBody LoginParam param) { + String email = param.getEmail(); + CoolPreconditions.checkEmpty(email); + userInfoService.sendEmailCodeForRegister(email, emailSendService); + return R.ok(); + } + @TokenIgnore @Operation(summary = "用户名注册") @PostMapping("/usernameRegister") diff --git a/src/main/java/com/cool/modules/user/service/UserInfoService.java b/src/main/java/com/cool/modules/user/service/UserInfoService.java index 3482419..359df0c 100644 --- a/src/main/java/com/cool/modules/user/service/UserInfoService.java +++ b/src/main/java/com/cool/modules/user/service/UserInfoService.java @@ -11,13 +11,19 @@ public interface UserInfoService extends BaseService { void sendEmailCode(Long userId, EmailSendService emailSendService); + void sendEmailCodeForRegister(String email, EmailSendService emailSendService); + + void sendEmailCodeForUpdateEmail(Long userId, String newEmail, EmailSendService emailSendService); + + void checkEmailCode(String cacheKey, String code); + void updatePasswordByEmail(Long userId, String password, String code); void logoff(Long currentUserId); void bindPhone(Long currentUserId, String phone, String code); - void bindEmail(Long currentUserId, String email); + void bindEmail(Long currentUserId, String email, String code); void bindUsername(Long currentUserId, String username); @@ -31,5 +37,5 @@ public interface UserInfoService extends BaseService { void checkUsernameUnique(String username, Long excludeId); - void updateEmail(Long currentUserId, String email); + void updateEmail(Long currentUserId, String email, String code); } diff --git a/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java b/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java index 09e62d6..f205ebf 100644 --- a/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java +++ b/src/main/java/com/cool/modules/user/service/impl/UserInfoServiceImpl.java @@ -26,6 +26,16 @@ public class UserInfoServiceImpl extends BaseServiceImpl