From 4eef7a632a87f61060794e6d70135453042d3185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=A3=E4=BA=9B=E8=8A=B1=E5=84=BF?= <1156921458@qq.com> Date: Tue, 6 May 2025 16:21:00 +0800 Subject: [PATCH] .. --- .../auth/controller/ClientAuthController.java | 2 +- .../app/client/auth/models/Client_user.java | 10 + .../auth/service/ClientAuthService.java | 2 +- .../auth/service/ClientAuthServiceImpl.java | 32 +- .../app/client/auth/vo/ClientLoginBody.java | 4 + frontend/src/pages/login/index.vue | 43 +- frontend/src/pages/login/register.vue | 464 +++++++++--------- frontend/vite.config.js | 2 +- 8 files changed, 313 insertions(+), 246 deletions(-) diff --git a/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java b/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java index 333250f..68c861b 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java +++ b/backend/src/main/java/com/budwk/app/client/auth/controller/ClientAuthController.java @@ -85,7 +85,7 @@ public class ClientAuthController { @ApiOperation(value = "短信登录", nickname = "/sms-login", httpMethod = "POST") public Object doSmsLogin(ClientLoginBody loginBody, HttpServletRequest req) { try { - String token = clientAuthService.doSmsLogin(loginBody); + String token = clientAuthService.doLogin(loginBody); return Result.success().addData(token); } catch (Exception e) { log.error(e.getMessage(), e); diff --git a/backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java b/backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java index 89417fb..89b3545 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java +++ b/backend/src/main/java/com/budwk/app/client/auth/models/Client_user.java @@ -48,6 +48,16 @@ public class Client_user extends BaseModel implements Serializable { @Comment("单位ID") private String unitId; + @Column + @ColDefine(type = ColType.VARCHAR, width = 255) + @Comment("密码") + private String password; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 255) + @Comment("盐") + private String salt; + @Column @ColDefine(type = ColType.VARCHAR, width = 255) @Comment("openId") diff --git a/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthService.java b/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthService.java index 551a5be..67ac60a 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthService.java +++ b/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthService.java @@ -10,7 +10,7 @@ public interface ClientAuthService { * @param loginBody 登录信息 * @return token */ - String doSmsLogin(ClientLoginBody loginBody); + String doLogin(ClientLoginBody loginBody); /** * 注册 diff --git a/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java b/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java index 2cb8a49..c12d31f 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java +++ b/backend/src/main/java/com/budwk/app/client/auth/service/ClientAuthServiceImpl.java @@ -1,7 +1,9 @@ package com.budwk.app.client.auth.service; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.utils.PwdUtil; import com.budwk.app.client.auth.vo.ClientLoginBody; import com.budwk.app.client.auth.models.Client_user; import com.budwk.app.client.auth.vo.ClientRegisterBody; @@ -11,6 +13,9 @@ import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Strings; + +import java.util.List; @IocBean public class ClientAuthServiceImpl implements ClientAuthService { @@ -21,23 +26,34 @@ public class ClientAuthServiceImpl implements ClientAuthService { private ValidateService validateService; @Override - public String doSmsLogin(ClientLoginBody loginBody) { + public String doLogin(ClientLoginBody loginBody) { Client_user user = null; int count = dao.count(Client_user.class, Cnd.where(Client_user::getPhone, "=", loginBody.getPhone())); if (count == 0) { -// // 自动注册 -// user = new Client_user(); -// user.setPhone(loginBody.getPhone()); -// user.setUserName("用户" + loginBody.getPhone()); -// dao.insert(user); throw new BaseException("手机号码不存在"); } - validateService.checkSMSCode(loginBody.getPhone(), loginBody.getSmsCode()); user = dao.fetch(Client_user.class, Cnd.where(Client_user::getPhone, "=", loginBody.getPhone())); + if (user == null) { - throw new BaseException("用户登录失败"); + throw new BaseException("用户不存在"); } + + if (StrUtil.isBlank(loginBody.getLoginMethod()) || !List.of("sms", "password").contains(loginBody.getLoginMethod())) { + throw new BaseException("登录方式不正确"); + } + + if (loginBody.getLoginMethod().equals("sms")) { + validateService.checkSMSCode(loginBody.getPhone(), loginBody.getSmsCode()); + } + + if (loginBody.getLoginMethod().equals("password")) { + String hashedPassword = PwdUtil.getPassword(loginBody.getPassword(), user.getSalt()); + if (!Strings.sNull(hashedPassword).equalsIgnoreCase(user.getPassword())) { + throw new BaseException("密码不正确"); + } + } + StpClientUtil.STP.login(user.getId()); StpClientUtil.STP.checkLogin(); return StpClientUtil.STP.getTokenValue(); diff --git a/backend/src/main/java/com/budwk/app/client/auth/vo/ClientLoginBody.java b/backend/src/main/java/com/budwk/app/client/auth/vo/ClientLoginBody.java index f192016..41b39a3 100644 --- a/backend/src/main/java/com/budwk/app/client/auth/vo/ClientLoginBody.java +++ b/backend/src/main/java/com/budwk/app/client/auth/vo/ClientLoginBody.java @@ -9,4 +9,8 @@ public class ClientLoginBody { private String smsCode; + private String password; + + private String loginMethod; + } diff --git a/frontend/src/pages/login/index.vue b/frontend/src/pages/login/index.vue index b20beb9..3419d54 100644 --- a/frontend/src/pages/login/index.vue +++ b/frontend/src/pages/login/index.vue @@ -62,16 +62,16 @@ - 手机快速登录 + 验证码登录 - 账号密码登录 + 密码登录 @@ -90,7 +90,7 @@ - + + + + + + + 立即登录 @@ -127,17 +139,14 @@ import {useUserStore} from "@/store"; const request = useRequest() const userStore = useUserStore() -const activeMethod = ref('phone') const loginForm = reactive({ phone: '', - smsCode: '' + smsCode: '', + password: '', + loginMethod: 'sms' }) -const setActiveMethod = (method) => { - activeMethod.value = method -} - // 倒计时相关 const countdown = ref(0) const timer = ref(null) @@ -265,10 +274,14 @@ async function handleLogin() { Toast('请输入手机号码'); return } - if (!loginForm.smsCode) { + if (!loginForm.smsCode && loginForm.loginMethod === 'sms') { Toast('请输入验证码'); return } + if (!loginForm.password && loginForm.loginMethod === 'password') { + Toast('请输入密码'); + return + } try { userStore.smsLogin(loginForm).then(() => { @@ -318,7 +331,7 @@ async function handleLogin() { } } -function navigateToRegister(){ +function navigateToRegister() { uni.redirectTo({ url: '/pages/login/register' }) diff --git a/frontend/src/pages/login/register.vue b/frontend/src/pages/login/register.vue index caf88c3..ae0c8a4 100644 --- a/frontend/src/pages/login/register.vue +++ b/frontend/src/pages/login/register.vue @@ -1,8 +1,57 @@