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 @@
-
-
-
+
+
+
+
+
+
JOIN US
@@ -11,91 +60,77 @@
-
-
-
- 填写信息
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+ {{ formData.unitName || '请选择单位' }}
+
+
-
-
-
-
-
-
- {{ formData.unitName || '请选择单位' }}
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+ {{ countdown > 0 ? `${countdown}秒` : '获取验证码' }}
+
-
-
-
-
-
-
-
- {{ countdown > 0 ? `${countdown}秒` : '获取验证码' }}
-
-
+
+
+ {{ registering ? '注册中...' : '立即注册' }}
+
-
-
- {{ registering ? '注册中...' : '立即注册' }}
-
-
-
-
- 已有账号?
- 立即登录
-
+
+
+ 已有账号?
+ 立即登录
@@ -107,36 +142,36 @@
选择单位
确定
-
+
-
-
-
+
-
- {
if (!searchKeyword.value) {
return unitList.value;
}
- return unitList.value.filter(unit =>
+ return unitList.value.filter(unit =>
unit.name.toLowerCase().includes(searchKeyword.value.toLowerCase())
);
});
@@ -238,7 +273,7 @@ const confirmUnitSelection = () => {
Toast({ message: '请选择单位', theme: 'warning' });
return;
}
-
+
const selectedUnit = unitList.value.find(unit => unit.id === selectedUnitId.value);
if (selectedUnit) {
formData.unitId = selectedUnit.id;
@@ -268,16 +303,16 @@ const sendVerificationCode = async () => {
Toast({ message: '请输入正确的手机号', theme: 'error' });
return;
}
-
+
if (countdown.value > 0) return;
-
+
sendingCode.value = true;
try {
const { code, msg } = await useRequest().post('/client/auth/send-verification-code', {
phone: formData.phone,
type: 'register'
});
-
+
if (code === 0) {
Toast({ message: '验证码已发送' });
startCountdown();
@@ -309,7 +344,7 @@ const handleRegister = async () => {
Toast({ message: '请完善注册信息', theme: 'error' });
return;
}
-
+
registering.value = true;
try {
const { code, msg } = await useRequest().post('/client/auth/register', {
@@ -319,7 +354,7 @@ const handleRegister = async () => {
idCard: formData.idCard,
verificationCode: formData.verificationCode
});
-
+
if (code === 0) {
Toast({ message: '注册成功' });
// 注册成功后跳转到登录页
@@ -368,184 +403,173 @@ onMounted(() => {