fix: 注册后不再自动登录,角色改为普通用户,部门改为待分配部门;修复编辑用户时密码被重复哈希的bug

This commit is contained in:
OpenCode
2026-07-16 19:17:25 +08:00
parent 4bd3c7ab40
commit 791f006ce1
6 changed files with 108 additions and 6 deletions
@@ -13,6 +13,7 @@ import com.cool.core.plugin.service.CoolPluginService;
import com.cool.core.request.R;
import com.cool.core.util.CoolPluginInvokers;
import com.cool.modules.base.dto.sys.BaseSysLoginDto;
import com.cool.modules.base.dto.sys.BaseSysRegisterDto;
import com.cool.modules.base.service.sys.BaseSysLoginService;
import com.cool.modules.plugin.entity.PluginInfoEntity;
import io.micrometer.common.util.StringUtils;
@@ -55,6 +56,12 @@ public class AdminBaseOpenController {
return R.ok(baseSysLoginService.login(baseSysLoginDto));
}
@Operation(summary = "注册")
@PostMapping("/register")
public R register(@RequestBody BaseSysRegisterDto baseSysRegisterDto) {
return R.ok(baseSysLoginService.register(baseSysRegisterDto));
}
@Operation(summary = "验证码")
@GetMapping("/captcha")
public R captcha(@Parameter(description = "类型:svg|base64") @RequestParam(defaultValue = "base64") String type,
@@ -0,0 +1,34 @@
package com.cool.modules.base.dto.sys;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@Schema(description = "注册参数")
public class BaseSysRegisterDto {
@Schema(description = "用户名")
@NotBlank
private String username;
@Schema(description = "密码")
@NotBlank
private String password;
@Schema(description = "昵称")
private String nickName;
@Schema(description = "手机号")
private String phone;
@Schema(description = "邮箱")
private String email;
@Schema(description = "验证码ID")
private String captchaId;
@Schema(description = "验证码")
private String verifyCode;
}
@@ -2,6 +2,7 @@ package com.cool.modules.base.service.sys;
import com.cool.core.enums.UserTypeEnum;
import com.cool.modules.base.dto.sys.BaseSysLoginDto;
import com.cool.modules.base.dto.sys.BaseSysRegisterDto;
/**
* 系统登录
@@ -45,4 +46,12 @@ public interface BaseSysLoginService {
* @return 新的token
*/
Object refreshToken(String refreshToken);
/**
* 注册
*
* @param baseSysRegisterDto 注册必要信息
* @return token与相关的过期信息
*/
Object register(BaseSysRegisterDto baseSysRegisterDto);
}
@@ -8,6 +8,7 @@ import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.jwt.JWT;
import com.cool.core.cache.CoolCache;
import com.cool.core.enums.UserTypeEnum;
@@ -15,13 +16,16 @@ import com.cool.core.exception.CoolPreconditions;
import com.cool.core.security.jwt.JwtTokenUtil;
import com.cool.core.util.CoolSecurityUtil;
import com.cool.modules.base.dto.sys.BaseSysLoginDto;
import com.cool.modules.base.dto.sys.BaseSysLoginDto;
import com.cool.modules.base.dto.sys.BaseSysRegisterDto;
import com.cool.modules.base.entity.sys.BaseSysDepartmentEntity;
import com.cool.modules.base.entity.sys.BaseSysRoleEntity;
import com.cool.modules.base.entity.sys.BaseSysUserEntity;
import com.cool.modules.base.mapper.sys.BaseSysDepartmentMapper;
import com.cool.modules.base.mapper.sys.BaseSysRoleMapper;
import com.cool.modules.base.mapper.sys.BaseSysUserMapper;
import com.cool.modules.base.service.sys.BaseSysLoginService;
import com.cool.modules.base.service.sys.BaseSysPermsService;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.query.QueryWrapper;
import java.awt.Color;
import java.util.HashMap;
import java.util.Map;
@@ -44,6 +48,10 @@ public class BaseSysLoginServiceImpl implements BaseSysLoginService {
private final BaseSysUserMapper baseSysUserMapper;
private final BaseSysRoleMapper baseSysRoleMapper;
private final BaseSysDepartmentMapper baseSysDepartmentMapper;
private final BaseSysPermsService baseSysPermsService;
@org.springframework.beans.factory.annotation.Value("${cool.captcha.enable:true}")
@@ -124,6 +132,40 @@ public class BaseSysLoginServiceImpl implements BaseSysLoginService {
return generateToken(roleIds, baseSysUserEntity, refreshToken);
}
@Override
public Object register(BaseSysRegisterDto baseSysRegisterDto) {
if (captchaEnable) {
captchaCheck(baseSysRegisterDto.getCaptchaId(), baseSysRegisterDto.getVerifyCode());
}
BaseSysUserEntity existUser = baseSysUserMapper.selectOneByQuery(
QueryWrapper.create().eq(BaseSysUserEntity::getUsername, baseSysRegisterDto.getUsername()));
CoolPreconditions.check(existUser != null, "用户名已存在");
BaseSysRoleEntity normalRole = baseSysRoleMapper.selectOneByQuery(
QueryWrapper.create().eq(BaseSysRoleEntity::getLabel, "user"));
CoolPreconditions.check(normalRole == null, "系统未配置普通用户角色,请联系管理员");
BaseSysDepartmentEntity defaultDepartment = baseSysDepartmentMapper.selectOneByQuery(
QueryWrapper.create().eq(BaseSysDepartmentEntity::getName, "待分配部门")
.eq(BaseSysDepartmentEntity::getStatus, 1));
CoolPreconditions.check(defaultDepartment == null, "系统未配置部门,请联系管理员");
BaseSysUserEntity userEntity = new BaseSysUserEntity();
userEntity.setUsername(baseSysRegisterDto.getUsername());
userEntity.setPassword(MD5.create().digestHex(baseSysRegisterDto.getPassword()));
userEntity.setPasswordV(1);
userEntity.setNickName(StrUtil.isNotEmpty(baseSysRegisterDto.getNickName())
? baseSysRegisterDto.getNickName() : baseSysRegisterDto.getUsername());
userEntity.setName(userEntity.getNickName());
userEntity.setPhone(baseSysRegisterDto.getPhone());
userEntity.setEmail(baseSysRegisterDto.getEmail());
userEntity.setStatus(1);
userEntity.setDepartmentId(defaultDepartment.getId());
baseSysUserMapper.insertSelective(userEntity);
baseSysPermsService.updateUserRole(userEntity.getId(), new Long[]{normalRole.getId()});
if (captchaEnable) {
coolCache.del("verify:img:" + baseSysRegisterDto.getCaptchaId());
}
return Dict.create().set("message", "注册成功");
}
private Dict generateToken(Long[] roleIds, BaseSysUserEntity baseSysUserEntity, String refreshToken) {
Dict tokenInfo =
Dict.create()
@@ -149,15 +149,15 @@ public class BaseSysUserServiceImpl extends BaseServiceImpl<BaseSysUserMapper, B
StrUtil.isNotEmpty(entity.getUsername()) && entity.getUsername().equals("admin"),
"非法操作");
BaseSysUserEntity userEntity = getById(entity.getId());
if (StrUtil.isNotEmpty(entity.getPassword())) {
entity.setPasswordV(entity.getPasswordV() + 1);
entity.setPassword(MD5.create().digestHex(entity.getPassword()));
String requestPassword = requestParams.getStr("password");
if (StrUtil.isNotEmpty(requestPassword)) {
entity.setPasswordV(userEntity.getPasswordV() + 1);
entity.setPassword(MD5.create().digestHex(requestPassword));
coolCache.set("admin:passwordVersion:" + entity.getId(), entity.getPasswordV());
} else {
entity.setPassword(userEntity.getPassword());
entity.setPasswordV(userEntity.getPasswordV());
}
// 被禁用
if (entity.getStatus() == 0) {
CoolSecurityUtil.adminLogout(entity);
}
+10
View File
@@ -75,6 +75,16 @@
"relevance": 1,
"menuIdList": null,
"departmentIdList": null
},
{
"id": 2,
"userId": "1",
"name": "普通用户",
"label": "user",
"remark": "新注册用户默认角色",
"relevance": 1,
"menuIdList": null,
"departmentIdList": null
}
],
"base_sys_user": [