feat(user): 新增邮箱验证码发送与校验功能
This commit is contained in:
@@ -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分钟后再试" );
|
||||
/**
|
||||
* 状态码
|
||||
*/
|
||||
|
||||
@@ -78,7 +78,9 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
||||
"/user/register",
|
||||
"/character/updateUserCharacterSort",
|
||||
"/character/addUserCharacter",
|
||||
"/character/delUserCharacter"
|
||||
"/character/delUserCharacter",
|
||||
"/user/sendVerifyMail",
|
||||
"/user/verifyMailCode"
|
||||
};
|
||||
}
|
||||
@Bean
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user