Compare commits

...

1 Commits

Author SHA1 Message Date
芋道源码
a730c46a8c Add email and password login
---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/YunaiV/ruoyi-vue-pro?shareId=XXXX-XXXX-XXXX-XXXX).
2024-09-26 12:49:54 +08:00
5 changed files with 60 additions and 5 deletions

View File

@@ -92,7 +92,7 @@ public class AuthController {
@GetMapping("/get-permission-info")
@Operation(summary = "获取登录用户的权限信息")
public CommonResult<AuthPermissionInfoRespVO> getPermissionInfo() {
// 1.1 获得用户信息
// 1.1 <EFBFBD>
AdminUserDO user = userService.getUser(getLoginUserId());
if (user == null) {
return success(null);
@@ -154,4 +154,13 @@ public class AuthController {
return success(authService.socialLogin(reqVO));
}
// ========== 邮箱登录相关 ==========
@PostMapping("/email-login")
@PermitAll
@Operation(summary = "使用邮箱和密码登录")
public CommonResult<AuthLoginRespVO> emailLogin(@RequestBody @Valid AuthEmailLoginReqVO reqVO) {
return success(authService.emailLogin(reqVO));
}
}

View File

@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
@@ -32,6 +33,11 @@ public class AuthLoginReqVO {
@Length(min = 4, max = 16, message = "密码长度为 4-16 位")
private String password;
@Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "example@example.com")
@NotEmpty(message = "邮箱不能为空")
@Email(message = "邮箱格式不正确")
private String email;
// ========== 图片验证码相关 ==========
@Schema(description = "验证码,验证码开启时,需要传递", requiredMode = Schema.RequiredMode.REQUIRED,
@@ -66,4 +72,4 @@ public class AuthLoginReqVO {
return socialType == null || StrUtil.isNotEmpty(socialState);
}
}
}

View File

@@ -27,4 +27,7 @@ public class AuthLoginRespVO {
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime expiresTime;
@Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "example@example.com")
private String email;
}

View File

@@ -70,4 +70,12 @@ public interface AdminAuthService {
*/
AuthLoginRespVO refreshToken(String refreshToken);
/**
* 邮箱登录
*
* @param reqVO 登录信息
* @return 登录结果
*/
AuthLoginRespVO emailLogin(@Valid AuthEmailLoginReqVO reqVO);
}

View File

@@ -42,7 +42,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
* Auth Service 实现类
*
* @author 芋道源码
* @author <EFBFBD>
*/
@Service
@Slf4j
@@ -66,7 +66,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
private SmsCodeApi smsCodeApi;
/**
* 验证码的开关,默认为 true
* <EFBFBD>
*/
@Value("${yudao.captcha.enable:true}")
private Boolean captchaEnable;
@@ -124,7 +124,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
// 校验验证码
smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.ADMIN_MEMBER_LOGIN.getScene(), getClientIP()));
// 获得用户信息
// <EFBFBD>
AdminUserDO user = userService.getUserByMobile(reqVO.getMobile());
if (user == null) {
throw exception(USER_NOT_EXISTS);
@@ -134,6 +134,35 @@ public class AdminAuthServiceImpl implements AdminAuthService {
return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE);
}
@Override
public AuthLoginRespVO emailLogin(AuthEmailLoginReqVO reqVO) {
// 校验邮箱和密码
AdminUserDO user = authenticateByEmail(reqVO.getEmail(), reqVO.getPassword());
// 创建 Token 令牌,记录登录日志
return createTokenAfterLoginSuccess(user.getId(), reqVO.getEmail(), LoginLogTypeEnum.LOGIN_EMAIL);
}
private AdminUserDO authenticateByEmail(String email, String password) {
final LoginLogTypeEnum logTypeEnum = LoginLogTypeEnum.LOGIN_EMAIL;
// 校验邮箱是否存在
AdminUserDO user = userService.getUserByEmail(email);
if (user == null) {
createLoginLog(null, email, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
}
if (!userService.isPasswordMatch(password, user.getPassword())) {
createLoginLog(user.getId(), email, logTypeEnum, LoginResultEnum.BAD_CREDENTIALS);
throw exception(AUTH_LOGIN_BAD_CREDENTIALS);
}
// 校验是否禁用
if (CommonStatusEnum.isDisable(user.getStatus())) {
createLoginLog(user.getId(), email, logTypeEnum, LoginResultEnum.USER_DISABLED);
throw exception(AUTH_LOGIN_USER_DISABLED);
}
return user;
}
private void createLoginLog(Long userId, String username,
LoginLogTypeEnum logTypeEnum, LoginResultEnum loginResult) {
// 插入登录日志