[add] app注册、登录、实名认证、人员展示、通知
This commit is contained in:
@ -80,7 +80,7 @@ public class AuthController {
|
||||
* @param body 登录信息
|
||||
* @return 结果
|
||||
*/
|
||||
@ApiEncrypt
|
||||
// @ApiEncrypt
|
||||
@PostMapping("/login")
|
||||
public R<LoginVo> login(@RequestBody String body) {
|
||||
LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class);
|
||||
@ -183,7 +183,7 @@ public class AuthController {
|
||||
/**
|
||||
* 用户注册
|
||||
*/
|
||||
@ApiEncrypt
|
||||
// @ApiEncrypt
|
||||
@PostMapping("/register")
|
||||
public R<Void> register(@Validated @RequestBody RegisterBody user) {
|
||||
if (!configService.selectRegisterEnabled(user.getTenantId())) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.dromara.web.service;
|
||||
|
||||
import cn.dev33.satoken.secure.BCrypt;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.constant.Constants;
|
||||
@ -43,6 +44,7 @@ public class SysRegisterService {
|
||||
public void register(RegisterBody registerBody) {
|
||||
String tenantId = registerBody.getTenantId();
|
||||
String username = registerBody.getUsername();
|
||||
String phonenumber = registerBody.getPhonenumber();
|
||||
String password = registerBody.getPassword();
|
||||
// 校验用户类型是否存在
|
||||
String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
|
||||
@ -52,6 +54,15 @@ public class SysRegisterService {
|
||||
if (!isValid) {
|
||||
throw new UserException("注册失败,密码需满足8–18位,包含大小写字母、数字、特殊字符中的至少三种组合");
|
||||
}
|
||||
String middleFour = phonenumber.substring(3, 7);
|
||||
if (StringUtils.isBlank(username)) {
|
||||
do {
|
||||
// 生成 6 位随机字母,并转为小写
|
||||
String randomSix = RandomUtil.randomString(6).toLowerCase();
|
||||
username = randomSix + middleFour;
|
||||
// 如果已有同名记录,循环继续
|
||||
} while (existsUsername(username));
|
||||
}
|
||||
boolean captchaEnabled = captchaProperties.getEnable();
|
||||
// 验证码开关
|
||||
if (captchaEnabled) {
|
||||
@ -62,6 +73,7 @@ public class SysRegisterService {
|
||||
sysUser.setNickName(username);
|
||||
sysUser.setPassword(BCrypt.hashpw(password));
|
||||
sysUser.setUserType(userType);
|
||||
sysUser.setPhonenumber(phonenumber);
|
||||
|
||||
boolean exist = TenantHelper.dynamic(tenantId, () -> {
|
||||
return userMapper.exists(new LambdaQueryWrapper<SysUser>()
|
||||
@ -77,6 +89,13 @@ public class SysRegisterService {
|
||||
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
|
||||
}
|
||||
|
||||
private boolean existsUsername(String username) {
|
||||
LambdaQueryWrapper<SysUser> qw = new LambdaQueryWrapper<>();
|
||||
qw.eq(SysUser::getUserName, username);
|
||||
// selectCount 性能足够,若并发极高可改为 exists 查询
|
||||
return userMapper.selectCount(qw) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验验证码
|
||||
*
|
||||
|
@ -54,17 +54,31 @@ public class PasswordAuthStrategy implements IAuthStrategy {
|
||||
String tenantId = loginBody.getTenantId();
|
||||
String username = loginBody.getUsername();
|
||||
String password = loginBody.getPassword();
|
||||
String phonenumber = loginBody.getPhonenumber();
|
||||
String code = loginBody.getCode();
|
||||
String uuid = loginBody.getUuid();
|
||||
|
||||
// 2. 如果没传用户名,用手机号去查,并写到新的局部变量里
|
||||
String finalUsername;
|
||||
if (StringUtils.isAllBlank(username, phonenumber)) {
|
||||
throw new UserException("用户名或手机号不能为空");
|
||||
}
|
||||
if (StringUtils.isBlank(username)) {
|
||||
SysUserVo sysUserVo = userMapper.selectVoOne(
|
||||
new LambdaQueryWrapper<SysUser>()
|
||||
.eq(SysUser::getPhonenumber, phonenumber)
|
||||
);
|
||||
finalUsername = sysUserVo.getUserName();
|
||||
} else {
|
||||
finalUsername = username;
|
||||
}
|
||||
boolean captchaEnabled = captchaProperties.getEnable();
|
||||
// 验证码开关
|
||||
if (captchaEnabled) {
|
||||
validateCaptcha(tenantId, username, code, uuid);
|
||||
validateCaptcha(tenantId, finalUsername, code, uuid);
|
||||
}
|
||||
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
|
||||
SysUserVo user = loadUserByUsername(username);
|
||||
loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
|
||||
SysUserVo user = loadUserByUsername(finalUsername);
|
||||
loginService.checkLogin(LoginType.PASSWORD, tenantId, finalUsername, () -> !BCrypt.checkpw(password, user.getPassword()));
|
||||
// 此处可根据登录用户的数据不同 自行创建 loginUser
|
||||
return loginService.buildLoginUser(user);
|
||||
});
|
||||
|
@ -8,7 +8,7 @@ ruoyi:
|
||||
copyrightYear: 2024
|
||||
|
||||
captcha:
|
||||
enable: true
|
||||
enable: false
|
||||
# 页面 <参数设置> 可开启关闭 验证码校验
|
||||
# 验证码类型 math 数组计算 char 字符验证
|
||||
type: MATH
|
||||
@ -193,7 +193,6 @@ api-decrypt:
|
||||
- /v3/api-docs/** # 放行OpenAPI文档
|
||||
- /actuator/** # 放行监控接口
|
||||
- /other/ys7Device/webhook # 放行萤石云设备回调接口
|
||||
- /auth/register # 放行注册接口
|
||||
|
||||
springdoc:
|
||||
api-docs:
|
||||
|
Reference in New Issue
Block a user