From 5de3b3e08cd555dc19525ad8411340c11bb0bc12 Mon Sep 17 00:00:00 2001 From: OpenCode Date: Tue, 21 Jul 2026 19:51:39 +0800 Subject: [PATCH] feat: add email and username login for app user --- .../app/AppUserLoginController.java | 28 +++++++++++++++++++ .../controller/app/params/LoginParam.java | 6 ++++ .../modules/user/entity/UserInfoEntity.java | 4 +++ .../user/service/UserLoginService.java | 10 +++++++ .../service/impl/UserLoginServiceImpl.java | 28 +++++++++++++++++++ 5 files changed, 76 insertions(+) diff --git a/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java b/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java index 53fe9d8..955b86a 100644 --- a/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java +++ b/src/main/java/com/cool/modules/user/controller/app/AppUserLoginController.java @@ -179,4 +179,32 @@ public class AppUserLoginController { CoolPreconditions.checkEmpty(password); return R.ok(userLoginService.password(phone, password)); } + + /** + * 邮箱密码登录 + */ + @TokenIgnore + @Operation(summary = "邮箱密码登录") + @PostMapping("/email") + public R email(@RequestBody LoginParam param) { + String email = param.getEmail(); + String password = param.getPassword(); + CoolPreconditions.checkEmpty(email); + CoolPreconditions.checkEmpty(password); + return R.ok(userLoginService.emailLogin(email, password)); + } + + /** + * 用户名密码登录 + */ + @TokenIgnore + @Operation(summary = "用户名密码登录") + @PostMapping("/username") + public R username(@RequestBody LoginParam param) { + String username = param.getUsername(); + String password = param.getPassword(); + CoolPreconditions.checkEmpty(username); + CoolPreconditions.checkEmpty(password); + return R.ok(userLoginService.usernameLogin(username, password)); + } } diff --git a/src/main/java/com/cool/modules/user/controller/app/params/LoginParam.java b/src/main/java/com/cool/modules/user/controller/app/params/LoginParam.java index bb4df32..2bcf567 100644 --- a/src/main/java/com/cool/modules/user/controller/app/params/LoginParam.java +++ b/src/main/java/com/cool/modules/user/controller/app/params/LoginParam.java @@ -31,4 +31,10 @@ public class LoginParam { /*******密码登录*******/ private String password; + + /*******邮箱登录*******/ + private String email; + + /*******用户名登录*******/ + private String username; } diff --git a/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java b/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java index 0fc5684..67dfe86 100644 --- a/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java +++ b/src/main/java/com/cool/modules/user/entity/UserInfoEntity.java @@ -26,6 +26,10 @@ public class UserInfoEntity extends BaseEntity { @ColumnDefine(comment = "手机号") private String phone; + @UniIndex + @ColumnDefine(comment = "邮箱") + private String email; + @ColumnDefine(comment = "性别 0-未知 1-男 2-女", defaultValue = "0") private Integer gender; diff --git a/src/main/java/com/cool/modules/user/service/UserLoginService.java b/src/main/java/com/cool/modules/user/service/UserLoginService.java index 9c8048f..ed9b436 100644 --- a/src/main/java/com/cool/modules/user/service/UserLoginService.java +++ b/src/main/java/com/cool/modules/user/service/UserLoginService.java @@ -54,4 +54,14 @@ public interface UserLoginService { * 密码登录 */ Object password(String phone, String password); + + /** + * 邮箱密码登录 + */ + Object emailLogin(String email, String password); + + /** + * 用户名密码登录 + */ + Object usernameLogin(String username, String password); } diff --git a/src/main/java/com/cool/modules/user/service/impl/UserLoginServiceImpl.java b/src/main/java/com/cool/modules/user/service/impl/UserLoginServiceImpl.java index d8202a6..62344ae 100644 --- a/src/main/java/com/cool/modules/user/service/impl/UserLoginServiceImpl.java +++ b/src/main/java/com/cool/modules/user/service/impl/UserLoginServiceImpl.java @@ -137,6 +137,34 @@ public class UserLoginServiceImpl implements UserLoginService { return null; } + @Override + public Object emailLogin(String email, String password) { + CoolPreconditions.checkEmpty(email, "邮箱不能为空"); + CoolPreconditions.checkEmpty(password, "密码不能为空"); + UserInfoEntity userInfoEntity = userInfoService.getOne( + QueryWrapper.create().eq(UserInfoEntity::getEmail, email)); + CoolPreconditions.checkEmpty(userInfoEntity, "邮箱或密码错误"); + if (userInfoEntity.getPassword().equals(MD5.create().digestHex(password))) { + return generateToken(userInfoEntity, null); + } + CoolPreconditions.alwaysThrow("邮箱或密码错误"); + return null; + } + + @Override + public Object usernameLogin(String username, String password) { + CoolPreconditions.checkEmpty(username, "用户名不能为空"); + CoolPreconditions.checkEmpty(password, "密码不能为空"); + UserInfoEntity userInfoEntity = userInfoService.getOne( + QueryWrapper.create().eq(UserInfoEntity::getNickName, username)); + CoolPreconditions.checkEmpty(userInfoEntity, "用户名或密码错误"); + if (userInfoEntity.getPassword().equals(MD5.create().digestHex(password))) { + return generateToken(userInfoEntity, null); + } + CoolPreconditions.alwaysThrow("用户名或密码错误"); + return null; + } + /** * 前置已校验用户的手机号, * 根据手机号找到用户生成token