mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 15:13:55 +08:00
新增发送短信验证码接口,找回密码接口,修改注册接口,如果开启手机注册模式,开启短信验证模式
--LoginController.java 添加和修改方法 --RetrievePasswordDTO.java 添加找回密码dto
This commit is contained in:
+65
-4
@@ -29,7 +29,9 @@ import xiaozhi.modules.security.service.CaptchaService;
|
||||
import xiaozhi.modules.security.service.SysUserTokenService;
|
||||
import xiaozhi.modules.security.user.SecurityUser;
|
||||
import xiaozhi.modules.sys.dto.PasswordDTO;
|
||||
import xiaozhi.modules.sys.dto.RetrievePasswordDTO;
|
||||
import xiaozhi.modules.sys.dto.SysUserDTO;
|
||||
import xiaozhi.modules.sys.service.SysParamsService;
|
||||
import xiaozhi.modules.sys.service.SysUserService;
|
||||
|
||||
/**
|
||||
@@ -43,17 +45,26 @@ public class LoginController {
|
||||
private final SysUserService sysUserService;
|
||||
private final SysUserTokenService sysUserTokenService;
|
||||
private final CaptchaService captchaService;
|
||||
private final SysParamsService sysParamsService;
|
||||
|
||||
@GetMapping("/captcha")
|
||||
@Operation(summary = "验证码")
|
||||
public void captcha(HttpServletResponse response, String uuid) throws IOException {
|
||||
// uuid不能为空
|
||||
AssertUtils.isBlank(uuid, ErrorCode.IDENTIFIER_NOT_NULL);
|
||||
|
||||
// 生成验证码
|
||||
captchaService.create(response, uuid);
|
||||
}
|
||||
|
||||
@GetMapping("/smsVerification")
|
||||
@Operation(summary = "短信验证码")
|
||||
public void smsVerification(String phone) throws IOException {
|
||||
// uuid不能为空
|
||||
AssertUtils.isBlank(phone, ErrorCode.IDENTIFIER_NOT_NULL);
|
||||
// 发送短信验证码
|
||||
captchaService.sendSMSValidateCode(phone);
|
||||
}
|
||||
|
||||
@PostMapping("/login")
|
||||
@Operation(summary = "登录")
|
||||
public Result<TokenDTO> login(@RequestBody LoginDTO login) {
|
||||
@@ -81,8 +92,23 @@ public class LoginController {
|
||||
if (!sysUserService.getAllowUserRegister()) {
|
||||
throw new RenException("当前不允许普通用户注册");
|
||||
}
|
||||
// 验证是否正确输入验证码
|
||||
boolean validate = captchaService.validate(login.getCaptchaId(), login.getCaptcha());
|
||||
// 是否开启手机注册
|
||||
Boolean isMobileRegister = sysParamsService.getValueObject(Constant.SysMSMParam
|
||||
.SYSTEM_ENABLE_MOBILE_REGISTER.getValue(), Boolean.class);
|
||||
boolean validate;
|
||||
if (isMobileRegister) {
|
||||
// 验证用户是否是手机号码
|
||||
boolean validPhone = ValidatorUtils.isValidPhone(login.getUsername());
|
||||
if (validPhone) {
|
||||
throw new RenException("用户名不是手机号码,请重新输入");
|
||||
}
|
||||
// 验证短信验证码是否正常
|
||||
validate = captchaService.validateSMSValidateCode(login.getUsername(),login.getCaptcha());
|
||||
} else {
|
||||
// 验证是否正确输入验证码
|
||||
validate = captchaService.validate(login.getCaptchaId(), login.getCaptcha());
|
||||
}
|
||||
// 判断是否通过验证
|
||||
if (!validate) {
|
||||
throw new RenException("验证码错误,请重新获取");
|
||||
}
|
||||
@@ -96,7 +122,6 @@ public class LoginController {
|
||||
userDTO.setPassword(login.getPassword());
|
||||
sysUserService.save(userDTO);
|
||||
return new Result<>();
|
||||
|
||||
}
|
||||
|
||||
@GetMapping("/info")
|
||||
@@ -118,6 +143,42 @@ public class LoginController {
|
||||
return new Result<>();
|
||||
}
|
||||
|
||||
@PutMapping("/retrieve-password")
|
||||
@Operation(summary = "找回密码")
|
||||
public Result<?> retrievePassword(@RequestBody RetrievePasswordDTO dto) {
|
||||
// 是否开启手机注册
|
||||
Boolean isMobileRegister = sysParamsService.getValueObject(Constant.SysMSMParam
|
||||
.SYSTEM_ENABLE_MOBILE_REGISTER.getValue(), Boolean.class);
|
||||
if (!isMobileRegister) {
|
||||
throw new RenException("没有开启手机注册,没法使用找回密码功能");
|
||||
}
|
||||
// 判断非空
|
||||
ValidatorUtils.validateEntity(dto);
|
||||
// 验证用户是否是手机号码
|
||||
boolean validPhone = ValidatorUtils.isValidPhone(dto.getPhone());
|
||||
if (validPhone) {
|
||||
throw new RenException("用户名不是手机号码,请重新输入");
|
||||
};
|
||||
|
||||
// 按照用户名获取用户
|
||||
SysUserDTO userDTO = sysUserService.getByUsername(dto.getPhone());
|
||||
if (userDTO == null) {
|
||||
throw new RenException("用户名或验证码错误");
|
||||
}
|
||||
// 验证用户是否是手机号码
|
||||
ValidatorUtils.isValidPhone(dto.getPhone());
|
||||
// 验证短信验证码是否正常
|
||||
boolean validate = captchaService.validateSMSValidateCode(dto.getPhone(),dto.getCode());
|
||||
// 判断是否通过验证
|
||||
if (!validate) {
|
||||
throw new RenException("用户名或验证码错误");
|
||||
}
|
||||
|
||||
Long userId = SecurityUser.getUserId();
|
||||
sysUserService.changePasswordDirectly(userId, dto.getPassword());
|
||||
return new Result<>();
|
||||
}
|
||||
|
||||
@GetMapping("/pub-config")
|
||||
@Operation(summary = "公共配置")
|
||||
public Result<Map<String, Object>> pubConfig() {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package xiaozhi.modules.sys.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 找回密码DTO
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "找回密码")
|
||||
public class RetrievePasswordDTO implements Serializable {
|
||||
|
||||
@Schema(description = "手机号码")
|
||||
@NotBlank(message = "{sysuser.password.require}")
|
||||
private String phone;
|
||||
|
||||
@Schema(description = "验证码")
|
||||
@NotBlank(message = "{sysuser.password.require}")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "新密码")
|
||||
@NotBlank(message = "{sysuser.password.require}")
|
||||
private String password;
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user