From 15a6e58013ece73740a760d6e399c61c8e6a258a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=BE=E4=B9=BE?= <1046762075@qq.com> Date: Thu, 17 Apr 2025 20:54:54 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E9=87=8D=E7=BD=AE=E5=AF=86?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/chat/controller/RoomController.java | 2 +- .../core/user/controller/TokenController.java | 7 +++ .../java/com/hula/core/user/dao/UserDao.java | 4 +- .../domain/vo/req/user/ForgotPasswordReq.java | 30 +++++++++++++ .../hula/core/user/service/LoginService.java | 7 +++ .../user/service/impl/LoginServiceImpl.java | 45 ++++++++++++++----- 6 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 hula-im-service/src/main/java/com/hula/core/user/domain/vo/req/user/ForgotPasswordReq.java diff --git a/hula-im-service/src/main/java/com/hula/core/chat/controller/RoomController.java b/hula-im-service/src/main/java/com/hula/core/chat/controller/RoomController.java index 2cc6465c..4073a98b 100644 --- a/hula-im-service/src/main/java/com/hula/core/chat/controller/RoomController.java +++ b/hula-im-service/src/main/java/com/hula/core/chat/controller/RoomController.java @@ -159,7 +159,7 @@ public class RoomController { } @Operation(summary = "查看公告") - @GetMapping("/announcement/{id}") + @GetMapping("/announcement") public ApiResult announcement(ReadAnnouncementsParam param){ return ApiResult.success(roomService.getAnnouncement(RequestHolder.get().getUid(), param)); } diff --git a/hula-im-service/src/main/java/com/hula/core/user/controller/TokenController.java b/hula-im-service/src/main/java/com/hula/core/user/controller/TokenController.java index e5edf7a1..24b8ef26 100644 --- a/hula-im-service/src/main/java/com/hula/core/user/controller/TokenController.java +++ b/hula-im-service/src/main/java/com/hula/core/user/controller/TokenController.java @@ -1,5 +1,6 @@ package com.hula.core.user.controller; +import com.hula.core.user.domain.vo.req.user.ForgotPasswordReq; import com.hula.core.user.domain.vo.req.user.LoginReq; import com.hula.core.user.domain.vo.req.user.LogoutReq; import com.hula.core.user.domain.vo.req.user.RefreshTokenReq; @@ -49,6 +50,12 @@ public class TokenController { return ApiResult.success(registerReq.getEmail()); } + @PostMapping("/forgotPassword") + @Operation(summary ="忘记密码|重置密码") + public ApiResult forgotPassword(@Valid @RequestBody ForgotPasswordReq forgotPasswordReq) { + return ApiResult.success(loginService.forgotPassword(forgotPasswordReq)); + } + @PostMapping("/refreshToken") @Operation(summary ="token续签") public ApiResult refreshToken(@RequestBody RefreshTokenReq refreshTokenReq) { diff --git a/hula-im-service/src/main/java/com/hula/core/user/dao/UserDao.java b/hula-im-service/src/main/java/com/hula/core/user/dao/UserDao.java index 05177e5c..e07fb9f6 100644 --- a/hula-im-service/src/main/java/com/hula/core/user/dao/UserDao.java +++ b/hula-im-service/src/main/java/com/hula/core/user/dao/UserDao.java @@ -46,8 +46,8 @@ public class UserDao extends ServiceImpl { updateById(update); } - public User getByName(String name) { - return lambdaQuery().eq(User::getName, name).one(); + public User getByEmail(String email) { + return lambdaQuery().eq(User::getEmail, email).one(); } public List getMemberList() { diff --git a/hula-im-service/src/main/java/com/hula/core/user/domain/vo/req/user/ForgotPasswordReq.java b/hula-im-service/src/main/java/com/hula/core/user/domain/vo/req/user/ForgotPasswordReq.java new file mode 100644 index 00000000..0c812877 --- /dev/null +++ b/hula-im-service/src/main/java/com/hula/core/user/domain/vo/req/user/ForgotPasswordReq.java @@ -0,0 +1,30 @@ +package com.hula.core.user.domain.vo.req.user; + +import com.hula.domain.BaseEntity; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; +import lombok.Data; + +/** + * @author 乾乾 + */ +@Data +public class ForgotPasswordReq extends BaseEntity { + + @NotEmpty(message = "请填写邮箱") + @Schema(description = "邮箱") + @Pattern(regexp = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$", message = "请输入有效的邮箱地址") + private String email; + + @NotEmpty(message = "邮箱验证码不能为空") + @Schema(description = "邮箱验证码") + private String code; + + @NotEmpty(message = "修改码非法!") + @Schema(description = "uuid") + private String uuid; + + @NotEmpty(message = "请输入密码") + private String password; +} diff --git a/hula-im-service/src/main/java/com/hula/core/user/service/LoginService.java b/hula-im-service/src/main/java/com/hula/core/user/service/LoginService.java index c51c83be..384f1055 100644 --- a/hula-im-service/src/main/java/com/hula/core/user/service/LoginService.java +++ b/hula-im-service/src/main/java/com/hula/core/user/service/LoginService.java @@ -1,10 +1,12 @@ package com.hula.core.user.service; +import com.hula.core.user.domain.vo.req.user.ForgotPasswordReq; import com.hula.core.user.domain.vo.req.user.LoginReq; import com.hula.core.user.domain.vo.req.user.RefreshTokenReq; import com.hula.core.user.domain.vo.req.user.RegisterReq; import com.hula.core.user.domain.vo.resp.user.LoginResultVO; import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; /** * @author nyh @@ -39,4 +41,9 @@ public interface LoginService { * 退出登录 */ void logout(Boolean autoLogin); + + /** + * 重置密码 + */ + Boolean forgotPassword(@Valid ForgotPasswordReq forgotPasswordReq); } diff --git a/hula-im-service/src/main/java/com/hula/core/user/service/impl/LoginServiceImpl.java b/hula-im-service/src/main/java/com/hula/core/user/service/impl/LoginServiceImpl.java index ed5eb650..fbcd5121 100644 --- a/hula-im-service/src/main/java/com/hula/core/user/service/impl/LoginServiceImpl.java +++ b/hula-im-service/src/main/java/com/hula/core/user/service/impl/LoginServiceImpl.java @@ -14,6 +14,7 @@ import com.hula.core.chat.service.ContactService; import com.hula.core.chat.service.RoomService; import com.hula.core.user.dao.UserDao; import com.hula.core.user.domain.entity.User; +import com.hula.core.user.domain.vo.req.user.ForgotPasswordReq; import com.hula.core.user.domain.vo.req.user.LoginReq; import com.hula.core.user.domain.vo.req.user.RefreshTokenReq; import com.hula.core.user.domain.vo.req.user.RegisterReq; @@ -78,17 +79,7 @@ public class LoginServiceImpl implements LoginService { @Override @Transactional(rollbackFor = Exception.class) public void normalRegister(RegisterReq req) { - String emailCode; - Object codeObj = RedisUtils.hget("emailCode", req.getUuid()); - if (ObjectUtil.isNotNull(codeObj)) { - emailCode = codeObj.toString(); - } else { - throw new BizException("验证码已过期"); - } - - if(StrUtil.isEmpty(emailCode) || !emailCode.equals(req.getCode())){ - throw new BizException("验证码错误!"); - } + checkCode(req.getUuid(), req.getCode()); // 2. 检查邮箱是否已被其他用户绑定 if (userDao.existsByEmailAndIdNot(null, req.getEmail())) { @@ -162,4 +153,36 @@ public class LoginServiceImpl implements LoginService { } } + @Override + public Boolean forgotPassword(ForgotPasswordReq req) { + // 1. 校验 + checkCode(req.getUuid(), req.getCode()); + + // 2. 修改密码 + User dbuUser = userDao.getByEmail(req.getEmail()); + User user = new User(); + user.setId(dbuUser.getId()); + user.setPassword(req.getPassword()); + return userDao.updateById(user); + } + + /** + * 检查验证码 + * @param uuid 验证码id + * @param code 验证码值 + */ + private static void checkCode(String uuid, String code) { + String emailCode; + Object codeObj = RedisUtils.hget("emailCode", uuid); + if (ObjectUtil.isNotNull(codeObj)) { + emailCode = codeObj.toString(); + } else { + throw new BizException("验证码已过期"); + } + + if (StrUtil.isEmpty(emailCode) || !emailCode.equals(code)) { + throw new BizException("验证码错误!"); + } + } + }