feat(user): 新增邮箱验证码发送与校验功能

This commit is contained in:
2025-12-04 19:15:56 +08:00
parent ec0ecbdacd
commit bb3ddc6b6a
6 changed files with 66 additions and 15 deletions

View File

@@ -36,7 +36,8 @@ public enum ErrorCode {
USER_CHARACTER_ADD_ERROR(50006,"添加用户键盘字符失败" ),
USER_CHARACTER_DEL_ERROR(50007, "删除用户人设失败"),
VERIFY_CODE_ERROR(50008, "验证码错误"),
REPEATEDLY_ADDING_CHARACTER(50009, "重复添加键盘人设");
REPEATEDLY_ADDING_CHARACTER(50009, "重复添加键盘人设"),
MAIL_SEND_BUSY(50010,"邮件发送频繁1分钟后再试" );
/**
* 状态码
*/

View File

@@ -78,7 +78,9 @@ public class SaTokenConfigure implements WebMvcConfigurer {
"/user/register",
"/character/updateUserCharacterSort",
"/character/addUserCharacter",
"/character/delUserCharacter"
"/character/delUserCharacter",
"/user/sendVerifyMail",
"/user/verifyMailCode"
};
}
@Bean

View File

@@ -5,10 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.yolo.keyborad.common.BaseResponse;
import com.yolo.keyborad.common.ResultUtils;
import com.yolo.keyborad.model.dto.AppleLoginReq;
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
import com.yolo.keyborad.model.dto.user.SendMailDTO;
import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.dto.user.UserRegisterDTO;
import com.yolo.keyborad.model.dto.user.*;
import com.yolo.keyborad.model.entity.KeyboardUser;
import com.yolo.keyborad.model.vo.user.KeyboardUserInfoRespVO;
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
@@ -95,4 +92,9 @@ public class UserController {
return ResultUtils.success(true);
}
@PostMapping("/verifyMailCode")
@Operation(summary = "验证验证码",description = "验证验证码接口")
public BaseResponse<Boolean> verifyMail(@RequestBody VerifyCodeDTO verifyCodeDTO) {
return ResultUtils.success(userService.verifyMailCode(verifyCodeDTO));
}
}

View File

@@ -0,0 +1,18 @@
package com.yolo.keyborad.model.dto.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/*
* @author: ziin
* @date: 2025/12/4 18:49
*/
@Data
public class VerifyCodeDTO {
@Schema(description = "邮箱地址")
private String mailAddress;
@Schema
private Integer verifyCode;
}

View File

@@ -1,10 +1,7 @@
package com.yolo.keyborad.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
import com.yolo.keyborad.model.dto.user.SendMailDTO;
import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.dto.user.UserRegisterDTO;
import com.yolo.keyborad.model.dto.user.*;
import com.yolo.keyborad.model.entity.KeyboardUser;
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
@@ -25,4 +22,6 @@ public interface UserService extends IService<KeyboardUser> {
Boolean userRegister(UserRegisterDTO userRegisterDTO);
void sendVerifyMail(SendMailDTO userRegisterDTO);
Boolean verifyMailCode(VerifyCodeDTO verifyCodeDTO);
}

View File

@@ -10,10 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yolo.keyborad.common.ErrorCode;
import com.yolo.keyborad.exception.BusinessException;
import com.yolo.keyborad.mapper.KeyboardUserMapper;
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
import com.yolo.keyborad.model.dto.user.SendMailDTO;
import com.yolo.keyborad.model.dto.user.UserLoginDTO;
import com.yolo.keyborad.model.dto.user.UserRegisterDTO;
import com.yolo.keyborad.model.dto.user.*;
import com.yolo.keyborad.model.entity.KeyboardUser;
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
import com.yolo.keyborad.service.UserService;
@@ -122,13 +119,45 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
if (!s.equals(userRegisterDTO.getVerifyCode())) {
throw new BusinessException(ErrorCode.VERIFY_CODE_ERROR);
}
redisUtil.delete("user" + userRegisterDTO.getMailAddress());
return keyboardUserMapper.insert(keyboardUser) > 0;
}
@Override
public void sendVerifyMail(SendMailDTO mailDTO) {
if (redisUtil.hasKey("limit_mail:" + mailDTO.getMailAddress())){
throw new BusinessException(ErrorCode.MAIL_SEND_BUSY);
}
String existCode = redisUtil.get("user:" + mailDTO.getMailAddress());
if (redisUtil.get("user:" + mailDTO.getMailAddress()) != null) {
sendMailUtils.sendEmail(null,mailDTO.getMailAddress(),Integer.valueOf(existCode));
return;
}
int code = RandomUtil.randomInt(100000, 999999);
redisUtil.setEx("user:"+mailDTO.getMailAddress(), String.valueOf(code),600, TimeUnit.SECONDS);
redisUtil.setEx("user:" + mailDTO.getMailAddress(), String.valueOf(code),600, TimeUnit.SECONDS);
sendMailUtils.sendEmail(null,mailDTO.getMailAddress(),code);
redisUtil.setEx("limit_mail:" + mailDTO.getMailAddress(), String.valueOf(code),60, TimeUnit.SECONDS);
}
@Override
public Boolean verifyMailCode(VerifyCodeDTO verifyCodeDTO) {
String s = redisUtil.get("user:" + verifyCodeDTO.getMailAddress());
if (s == null) {
throw new BusinessException(ErrorCode.VERIFY_CODE_ERROR);
}
if (s.equals(String.valueOf(verifyCodeDTO.getVerifyCode()))){
redisUtil.delete("user:" + verifyCodeDTO.getMailAddress());
return true;
}
return false;
}
}