feat(user): 新增邮箱验证码发送与校验功能
This commit is contained in:
@@ -36,7 +36,8 @@ public enum ErrorCode {
|
|||||||
USER_CHARACTER_ADD_ERROR(50006,"添加用户键盘字符失败" ),
|
USER_CHARACTER_ADD_ERROR(50006,"添加用户键盘字符失败" ),
|
||||||
USER_CHARACTER_DEL_ERROR(50007, "删除用户人设失败"),
|
USER_CHARACTER_DEL_ERROR(50007, "删除用户人设失败"),
|
||||||
VERIFY_CODE_ERROR(50008, "验证码错误"),
|
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",
|
"/user/register",
|
||||||
"/character/updateUserCharacterSort",
|
"/character/updateUserCharacterSort",
|
||||||
"/character/addUserCharacter",
|
"/character/addUserCharacter",
|
||||||
"/character/delUserCharacter"
|
"/character/delUserCharacter",
|
||||||
|
"/user/sendVerifyMail",
|
||||||
|
"/user/verifyMailCode"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@Bean
|
@Bean
|
||||||
|
|||||||
@@ -5,10 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import com.yolo.keyborad.common.BaseResponse;
|
import com.yolo.keyborad.common.BaseResponse;
|
||||||
import com.yolo.keyborad.common.ResultUtils;
|
import com.yolo.keyborad.common.ResultUtils;
|
||||||
import com.yolo.keyborad.model.dto.AppleLoginReq;
|
import com.yolo.keyborad.model.dto.AppleLoginReq;
|
||||||
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
|
import com.yolo.keyborad.model.dto.user.*;
|
||||||
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.entity.KeyboardUser;
|
import com.yolo.keyborad.model.entity.KeyboardUser;
|
||||||
import com.yolo.keyborad.model.vo.user.KeyboardUserInfoRespVO;
|
import com.yolo.keyborad.model.vo.user.KeyboardUserInfoRespVO;
|
||||||
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
||||||
@@ -95,4 +92,9 @@ public class UserController {
|
|||||||
return ResultUtils.success(true);
|
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;
|
package com.yolo.keyborad.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
|
import com.yolo.keyborad.model.dto.user.*;
|
||||||
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.entity.KeyboardUser;
|
import com.yolo.keyborad.model.entity.KeyboardUser;
|
||||||
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
||||||
|
|
||||||
@@ -25,4 +22,6 @@ public interface UserService extends IService<KeyboardUser> {
|
|||||||
Boolean userRegister(UserRegisterDTO userRegisterDTO);
|
Boolean userRegister(UserRegisterDTO userRegisterDTO);
|
||||||
|
|
||||||
void sendVerifyMail(SendMailDTO 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.common.ErrorCode;
|
||||||
import com.yolo.keyborad.exception.BusinessException;
|
import com.yolo.keyborad.exception.BusinessException;
|
||||||
import com.yolo.keyborad.mapper.KeyboardUserMapper;
|
import com.yolo.keyborad.mapper.KeyboardUserMapper;
|
||||||
import com.yolo.keyborad.model.dto.user.KeyboardUserReq;
|
import com.yolo.keyborad.model.dto.user.*;
|
||||||
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.entity.KeyboardUser;
|
import com.yolo.keyborad.model.entity.KeyboardUser;
|
||||||
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO;
|
||||||
import com.yolo.keyborad.service.UserService;
|
import com.yolo.keyborad.service.UserService;
|
||||||
@@ -122,13 +119,45 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
|
|||||||
if (!s.equals(userRegisterDTO.getVerifyCode())) {
|
if (!s.equals(userRegisterDTO.getVerifyCode())) {
|
||||||
throw new BusinessException(ErrorCode.VERIFY_CODE_ERROR);
|
throw new BusinessException(ErrorCode.VERIFY_CODE_ERROR);
|
||||||
}
|
}
|
||||||
|
redisUtil.delete("user" + userRegisterDTO.getMailAddress());
|
||||||
return keyboardUserMapper.insert(keyboardUser) > 0;
|
return keyboardUserMapper.insert(keyboardUser) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendVerifyMail(SendMailDTO mailDTO) {
|
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);
|
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);
|
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