Skip to content

Commit

Permalink
Merge pull request #369 from Jzow/master
Browse files Browse the repository at this point in the history
[EAIRP-366] Use email instead of phone number to log in and verify
  • Loading branch information
Jzow authored Mar 1, 2025
2 parents eca9f87 + b34ba03 commit 11ec449
Show file tree
Hide file tree
Showing 20 changed files with 122 additions and 10,650 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class AccountRegisterDTO {

String phoneNumber;

String sms;
String emailCode;

String email;
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@

import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.io.Serial;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
Expand All @@ -27,12 +31,16 @@
* </p>
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_tenant")
public class SysTenant implements Serializable {

private static final long serialVersionUID = 1L;
@Serial
private static final long serialVersionUID = 789916515633L;

/**
* 主键
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ public CaptchaVO getCaptcha() {
try (FastByteArrayOutputStream fos = new FastByteArrayOutputStream()) {
ImageIO.write(bi, "jpg", fos);
imgEncode = Base64.getEncoder().encodeToString(fos.toByteArray());
redisUtil.set(SecurityConstants.EMAIL_VERIFY_CODE_CACHE_PREFIX + captchaId, text, 180);
redisUtil.set(SecurityConstants.VERIFY_CODE_CACHE_PREFIX + captchaId, text, 180);
fos.flush();
} catch (Exception e) {
log.error("获取验证码失败: " + e.getMessage());
Expand Down Expand Up @@ -294,6 +294,18 @@ public Response<String> sendEmailCode(Integer type, String email) {
EmailUtils.loginEmailNotice(resultCode3, email);
}
break;
case 3:
String resultCode4 = "";
if (redisUtil.hasKey(SecurityConstants.EMAIL_REGISTER_VERIFY_CODE_CACHE_PREFIX + email)) {
resultCode4 = redisUtil.getString(SecurityConstants.EMAIL_REGISTER_VERIFY_CODE_CACHE_PREFIX + email);
EmailUtils.registerEmailNotice(resultCode4, email);
} else {
resultCode4 = getForgetCode();
redisUtil.set(SecurityConstants.EMAIL_REGISTER_VERIFY_CODE_CACHE_PREFIX + email, resultCode4);
redisUtil.expire(SecurityConstants.EMAIL_REGISTER_VERIFY_CODE_CACHE_PREFIX + email, 180);
EmailUtils.registerEmailNotice(resultCode4, email);
}
break;
default:
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wansenai.entities.system.SysPlatformConfig;
import com.wansenai.entities.tenant.SysTenant;
import com.wansenai.entities.warehouse.Warehouse;
import com.wansenai.mappers.tenant.SysTenantMapper;
import com.wansenai.mappers.warehouse.WarehouseMapper;
Expand Down Expand Up @@ -125,22 +126,22 @@ public Response<String> accountRegister(AccountRegisterDTO accountRegisterDto) {
return Response.responseMsg(BaseCodeEnum.PARAMETER_NULL);
}

var verifyCode = redisUtil.get(SecurityConstants.REGISTER_VERIFY_CODE_CACHE_PREFIX + accountRegisterDto.getPhoneNumber());
var verifyCode = redisUtil.get(SecurityConstants.EMAIL_REGISTER_VERIFY_CODE_CACHE_PREFIX + accountRegisterDto.getEmail());
if (ObjectUtils.isEmpty(verifyCode)) {
return Response.responseMsg(BaseCodeEnum.SMS_VERIFY_CODE_EXPIRE);
return Response.responseMsg(BaseCodeEnum.EMAIL_VERIFY_CODE_EXPIRE);
}

if (!String.valueOf(verifyCode).equals(accountRegisterDto.getSms())) {
return Response.responseMsg(BaseCodeEnum.SMS_VERIFY_CODE_ERROR);
if (!String.valueOf(verifyCode).equals(accountRegisterDto.getEmailCode())) {
return Response.responseMsg(BaseCodeEnum.EMAIL_VERIFY_CODE_ERROR);
}

// check if the username under the same tenant is duplicate
if (checkUserNameExist(accountRegisterDto.getUsername())) {
return Response.responseMsg(UserCodeEnum.USER_NAME_EXISTS);
}

if (checkPhoneNumberExist(accountRegisterDto.getPhoneNumber())) {
return Response.responseMsg(UserCodeEnum.USER_REGISTER_PHONE_EXISTS);
if (checkEmailExist(accountRegisterDto.getEmail())) {
return Response.responseMsg(UserCodeEnum.EMAIL_EXISTS);
}

var password = "";
Expand Down Expand Up @@ -233,15 +234,28 @@ public Response<String> accountRegister(AccountRegisterDTO accountRegisterDto) {
.createBy(userId)
.build();
warehouseMapper.insert(warehouse);
// 添加租户
var tenant = SysTenant.builder()
.id(userId)
.tenantId(userId)
.userId(userId)
.name("测试租户")
.userNumLimit(10)
.type(0)
.status(CommonConstants.NOT_DELETED)
.createTime(LocalDateTime.now())
.expireTime(LocalDateTime.now().plusYears(1))
.build();

var userResult = save(user);
var roleResult = roleMapper.insert(role);
var departmentResult = departmentMapper.insert(department);
var userRoleResult = userRoleRelService.save(userRoleRel);
var userDepartmentResult = userDeptRelService.save(userDepartmentRel);
var roleMenuResult = roleMenuRelService.save(roleMenuRel);
var tenantResult = tenantMapper.insert(tenant);

if (!userResult && roleResult!=0 && departmentResult!=0 && !userRoleResult && !userDepartmentResult && !roleMenuResult) {
if (!userResult && roleResult!=0 && departmentResult!=0 && !userRoleResult && !userDepartmentResult && !roleMenuResult && tenantResult!=0) {
return Response.fail();
}

Expand All @@ -251,7 +265,7 @@ public Response<String> accountRegister(AccountRegisterDTO accountRegisterDto) {
@Override
public Response<UserInfoVO> accountLogin(AccountLoginDTO accountLoginDto){

var verifyCode = redisUtil.get(SecurityConstants.EMAIL_VERIFY_CODE_CACHE_PREFIX + accountLoginDto.getCaptchaId());
var verifyCode = redisUtil.get(SecurityConstants.VERIFY_CODE_CACHE_PREFIX + accountLoginDto.getCaptchaId());
if (ObjectUtils.isEmpty(verifyCode)) {
return Response.responseMsg(BaseCodeEnum.VERIFY_CODE_EXPIRE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ public interface SecurityConstants {

String UPDATE_PHONE_VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:UPDATE_PHONE:";

String EMAIL_VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:EMAIL:";
String VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:";

String EMAIL_RESET_VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:EMAIL_RESET:";

String EMAIL_REGISTER_VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:EMAIL_REGISTER:";

String EMAIL_LOGIN_VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:EMAIL_LOGIN:";

String EMAIL_RESET_PASSWORD_LOGIN_VERIFY_CODE_CACHE_PREFIX = "AUTH:VERIFY_CODE:EMAIL_RESET_PASSWORD:";
Expand Down
64 changes: 20 additions & 44 deletions core/utils/src/main/java/com/wansenai/utils/email/EmailUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -244,94 +244,70 @@ public String send() throws Exception {
* @param to 收件人邮箱
*/
public static void forgetPasswordEmailNotice(String code, String to) throws Exception {
String subject = "【万森ERP系统】: 更改密码说明"; // 主题
String subject = "【EAIRP系统】: 更改密码说明"; // 主题

String body = "<pre>\n" +
"您好,\n" +
"\n" +
" 您已要求重置与此电子邮件地址 ("+ to + ")关联的 万森ERP系统 帐户的密码.\n\n" +
" 您已要求重置与此电子邮件地址 ("+ to + ")关联的 EAIRP系统 帐户的密码.\n\n" +
" 本次验证码是:<b>" + code + "</b>, 该验证码3分钟有效\n\n" +
" 如果您没有发起此请求,请忽略此电子邮件, \n" +
" 谢谢, \n\n\n" +
" 万森AI团队." +
" EAIRP团队." +
"</pre>";
EmailUtils emailUtils = EmailUtils.entity(EmailConstant.EMAIL_HOST, EmailConstant.EMAIL_USER_NAME, EmailConstant.EMAIL_PASSWORD, to, null, subject, body, null);
emailUtils.send();
}

public static void resetEmailNotice(String code, String to) throws Exception {
String subject = "【万森ERP系统】: 绑定邮箱地址"; // 主题
String subject = "【EAIRP系统】: 绑定邮箱地址"; // 主题

String body = "<pre>\n" +
"您好,\n" +
"\n" +
" 您已要求绑定与此电子邮件地址 ("+ to + ")关联的 万森ERP系统帐户.\n\n" +
" 您已要求绑定与此电子邮件地址 ("+ to + ")关联的 EAIRP系统帐户.\n\n" +
" 本次验证码是:<b>" + code + "</b>, 该验证码3分钟有效\n\n" +
" 如果您没有发起此请求,请忽略此电子邮件, \n" +
" 谢谢, \n\n\n" +
" 万森AI团队." +
" EAIRP团队." +
"</pre>";
EmailUtils emailUtils = EmailUtils.entity(EmailConstant.EMAIL_HOST, EmailConstant.EMAIL_USER_NAME, EmailConstant.EMAIL_PASSWORD, to, null, subject, body, null);
emailUtils.send();
}

public static void loginEmailNotice(String code, String to) throws Exception {
String subject = "【万森ERP系统】: 邮箱登录验证码"; // 主题
String subject = "【EAIRP系统】: 邮箱登录验证码"; // 主题

String body = "<pre>\n" +
"您好,\n" +
"\n" +
" 您正在登录与此电子邮件地址 ("+ to + ")关联的 万森ERP系统帐户.\n\n" +
" 您正在登录与此电子邮件地址 ("+ to + ")关联的 EAIRP系统帐户.\n\n" +
" 本次验证码是:<b>" + code + "</b>, 该验证码3分钟有效\n\n" +
" 如果您没有发起此请求,请忽略此电子邮件, \n" +
" 谢谢, \n\n\n" +
" 万森AI团队." +
" EAIRP团队." +
"</pre>";
EmailUtils emailUtils = EmailUtils.entity(EmailConstant.EMAIL_HOST, EmailConstant.EMAIL_USER_NAME, EmailConstant.EMAIL_PASSWORD, to, null, subject, body, null);
emailUtils.send();
}

/**
* 项目合同通知邮件模板
*
* @param projectName 项目名称
* @param date 时间
* @param to 收件人邮箱
*/
public static void projectExpirationEmailNotice(String projectName, String date, String to) throws Exception {
String subject = "【万森ERP系统】: 项目合同到期通知"; // 主题
public static void registerEmailNotice(String code, String to) {
String subject = "【EAIRP系统】: 注册验证码"; // 主题

String body = "<pre>\n" +
"您好,\n" +
"\n" +
" 公司签订的<b>" + projectName + "</b>[项目]合同于"+ date +"到期.\n\n" +
" 合同期满后, 准备续订(终止)该合同\n" +
" 谢谢, \n\n\n" +
" 新融合检测项目 团队." +
"</pre>";
EmailUtils emailUtils = EmailUtils.entity(EmailConstant.EMAIL_HOST, EmailConstant.EMAIL_USER_NAME, EmailConstant.EMAIL_PASSWORD, to, null, subject, body, null);
emailUtils.send();
}

/**
* 季度采样登记人通知邮件模板
*
* @param projectName 项目名称
* @param quarter 季度
* @param to 收件人邮箱
*/
public static void sampleRegistrantEmailNotice(String projectName, String quarter, String to) throws Exception {
String subject = "【山东新融和检测有限公司】: 季度签约通知"; // 主题

String body = "<pre>\n" +
"您好,\n" +
"\n" +
" 公司签订的<b>" + projectName + "</b>[项目]合同已到达第"+ quarter +"签约时间,请处理!\n\n" +
" 合同期满后, 准备续订(终止)该合同\n" +
" 您正在注册与此电子邮件地址 ("+ to + ")关联的 EAIRP系统帐户.\n\n" +
" 本次验证码是:<b>" + code + "</b>, 该验证码3分钟有效\n\n" +
" 如果您没有发起此请求,请忽略此电子邮件, \n" +
" 谢谢, \n\n\n" +
" 新融合检测项目 团队." +
" EAIRP团队." +
"</pre>";
EmailUtils emailUtils = EmailUtils.entity(EmailConstant.EMAIL_HOST, EmailConstant.EMAIL_USER_NAME, EmailConstant.EMAIL_PASSWORD, to, null, subject, body, null);
emailUtils.send();
try {
emailUtils.send();
} catch (Exception e) {
e.printStackTrace();
}
}
}
66 changes: 0 additions & 66 deletions docs/WanSenERP_API.md

This file was deleted.

Loading

0 comments on commit 11ec449

Please sign in to comment.