forked from github/cool-admin-java
fix: 注册后不再自动登录,角色改为普通用户,部门改为待分配部门;修复编辑用户时密码被重复哈希的bug
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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": [
|
||||
|
||||
Reference in New Issue
Block a user