1.新增重置密码

This commit is contained in:
乾乾
2025-04-17 20:54:54 +08:00
parent e9732707c9
commit 15a6e58013
6 changed files with 81 additions and 14 deletions

View File

@@ -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));
}

View File

@@ -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<Boolean> forgotPassword(@Valid @RequestBody ForgotPasswordReq forgotPasswordReq) {
return ApiResult.success(loginService.forgotPassword(forgotPasswordReq));
}
@PostMapping("/refreshToken")
@Operation(summary ="token续签")
public ApiResult<LoginResultVO> refreshToken(@RequestBody RefreshTokenReq refreshTokenReq) {

View File

@@ -46,8 +46,8 @@ public class UserDao extends ServiceImpl<UserMapper, User> {
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<User> getMemberList() {

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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("验证码错误!");
}
}
}