From 9af56f878cc3e22d3bce6ab53d67f3753470a7ac Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期五, 14 二月 2025 08:59:22 +0800
Subject: [PATCH] #
---
rsf-admin/src/api/auth/index.js | 5 +
rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java | 17 +++--
rsf-admin/src/page/settings/SecuritySettings.jsx | 6 +-
rsf-server/src/main/java/com/vincent/rsf/server/common/domain/BusinessRes.java | 11 +++
rsf-admin/src/page/settings/BaseSettings.jsx | 5 +
rsf-framework/src/main/java/com/vincent/rsf/framework/common/R.java | 6 +-
rsf-admin/src/config/authProvider.js | 2
rsf-server/src/main/resources/application-prod.yml | 2
rsf-admin/src/page/login/Register.jsx | 65 ++++++++++-----------
rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java | 4 +
rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java | 5 +
rsf-server/src/main/resources/application.yml | 3
rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java | 2
rsf-server/src/main/resources/application-dev.yml | 29 +++------
14 files changed, 91 insertions(+), 71 deletions(-)
diff --git a/rsf-admin/src/api/auth/index.js b/rsf-admin/src/api/auth/index.js
index e61d2f0..99d1cf5 100644
--- a/rsf-admin/src/api/auth/index.js
+++ b/rsf-admin/src/api/auth/index.js
@@ -24,6 +24,11 @@
return Promise.reject(new Error(res.data.msg));
}
+export async function register(_params) {
+ const res = await request.post('/register', _params);
+ return res.data;
+}
+
export async function menus(_params) {
return await request.get('/auth/menu', { params: _params });
if (res.data.code === 200) {
diff --git a/rsf-admin/src/config/authProvider.js b/rsf-admin/src/config/authProvider.js
index 38cf41d..ee3f976 100644
--- a/rsf-admin/src/config/authProvider.js
+++ b/rsf-admin/src/config/authProvider.js
@@ -11,6 +11,8 @@
username: username,
password: password,
tenantId: tenantId,
+ }).catch((error) => {
+ console.error(error);
});
if (user && accessToken) {
diff --git a/rsf-admin/src/page/login/Register.jsx b/rsf-admin/src/page/login/Register.jsx
index f927d52..e8a0822 100644
--- a/rsf-admin/src/page/login/Register.jsx
+++ b/rsf-admin/src/page/login/Register.jsx
@@ -21,7 +21,7 @@
import ProviderChoices from "./ProviderChoices";
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
-import { sendEmailCode } from '@/api/auth';
+import { sendEmailCode, register } from '@/api/auth';
const Register = (props) => {
const translate = useTranslate();
@@ -36,6 +36,7 @@
const username = watch('username');
const password = watch('password');
const confirmPassword = watch('confirmPassword');
+ const code = watch('code');
const [loading, setLoading] = useState(false);
const [codeLoading, setCodeLoading] = useState(false);
@@ -43,6 +44,7 @@
const [isCounting, setIsCounting] = useState(false);
const [countdown, setCountdown] = useState(60);
+ // send code
const handleSendCode = async () => {
if (!email) {
setError("email", {
@@ -64,6 +66,9 @@
const { code, msg, data } = res;
if (code === 200) {
notify(msg, { type: 'success', messageArgs: { _: msg } });
+ setIsCounting(true);
+ setCountdown(60);
+ localStorage.setItem('codeCountdown', 60);
} else {
notify(msg, { type: 'error', messageArgs: { _: msg } });
}
@@ -74,7 +79,7 @@
})
};
- // 鍊掕鏃跺姛鑳�
+ // countdown
useEffect(() => {
const savedCountdown = localStorage.getItem('codeCountdown');
if (savedCountdown && !isCounting) {
@@ -89,43 +94,35 @@
} else if (countdown <= 0) {
clearInterval(interval);
setIsCounting(false);
- localStorage.removeItem('codeCountdown'); // 閲嶇疆
+ localStorage.removeItem('codeCountdown');
}
}, 1000);
return () => clearInterval(interval);
}, [countdown, isCounting]);
-
- const onSubmit = (data) => {
- notify("Registration is not open yet");
- return;
+ // register
+ const onSubmit = (params) => {
+ // console.log(params);
setLoading(true);
- // js native confirm && root
- login(
- data,
- location.state ? (location.state).nextPathname : '/'
- ).catch((error) => {
+ register(params).then(res => {
setLoading(false);
- notify(
- typeof error === 'string'
- ? error
- : typeof error === 'undefined' || !error.message
- ? 'ra.auth.sign_in_error'
- : error.message,
- {
- type: 'error',
- messageArgs: {
- _:
- typeof error === 'string'
- ? error
- : error && error.message
- ? error.message
- : undefined,
- },
- }
- );
- });
+ const { code, msg, data } = res;
+ if (code === 200) {
+ console.log(data);
+ notify(msg, { type: 'success', messageArgs: { _: msg } });
+ } else if (code === 10002) {
+ setError("username", {
+ message: msg
+ })
+ } else {
+ notify(msg, { type: 'error', messageArgs: { _: msg } });
+ }
+ }).catch((error) => {
+ setLoading(false);
+ notify(error.message, { type: 'error', messageArgs: { _: error.message } });
+ console.error(error);
+ })
};
return (
@@ -142,7 +139,7 @@
control={control}
defaultValue=""
rules={{ required: true }}
- render={({ field }) => (
+ render={({ field, fieldState: { error } }) => (
<TextField
{...field}
label={translate("page.login.username")}
@@ -150,6 +147,8 @@
disabled={loading}
autoFocus
autoComplete="off"
+ error={!!error}
+ helperText={error?.message || ""}
/>
)}
/>
@@ -306,7 +305,7 @@
<Button
type="submit"
variant="contained"
- disabled={loading || !(email && username && password && confirmPassword)}
+ disabled={loading || !(email && username && password && confirmPassword && code)}
sx={{
backgroundColor: "#3D4BA7"
}}
diff --git a/rsf-admin/src/page/settings/BaseSettings.jsx b/rsf-admin/src/page/settings/BaseSettings.jsx
index de2e62a..0758826 100644
--- a/rsf-admin/src/page/settings/BaseSettings.jsx
+++ b/rsf-admin/src/page/settings/BaseSettings.jsx
@@ -37,7 +37,9 @@
formState: {
errors,
isDirty,
- }
+ },
+ setError,
+ clearErrors,
} = useForm();
const [loading, setLoading] = useState(false);
@@ -97,7 +99,6 @@
}}
/>
)}
- {/* https://github.com/themeselection/materio-mui-nextjs-admin-template-free/blob/main/javascript-version/src/views/account-settings/account/AccountDetails.jsx */}
<form onSubmit={handleSubmit(onSubmit)} noValidate>
<Stack
direction='column'
diff --git a/rsf-admin/src/page/settings/SecuritySettings.jsx b/rsf-admin/src/page/settings/SecuritySettings.jsx
index 265e616..42aeaad 100644
--- a/rsf-admin/src/page/settings/SecuritySettings.jsx
+++ b/rsf-admin/src/page/settings/SecuritySettings.jsx
@@ -38,15 +38,15 @@
}
}, [userInfo, setValue])
- const onSubmit = (data) => {
+ const onSubmit = (params) => {
setLoading(true);
- requestResetPassword(data).then(res => {
+ requestResetPassword(params).then(res => {
setLoading(false);
const { code, msg, data } = res;
if (code === 200) {
notify(msg, { type: 'success', messageArgs: { _: msg } });
reset();
- } else if (code === 408) {
+ } else if (code === 10001) {
setError('oldPassword', {
message: msg,
});
diff --git a/rsf-framework/src/main/java/com/vincent/rsf/framework/common/R.java b/rsf-framework/src/main/java/com/vincent/rsf/framework/common/R.java
index df80b60..08e9772 100644
--- a/rsf-framework/src/main/java/com/vincent/rsf/framework/common/R.java
+++ b/rsf-framework/src/main/java/com/vincent/rsf/framework/common/R.java
@@ -52,9 +52,9 @@
return parse(BaseRes.ERROR);
}
String[] msg = message.split("-");
- if(msg.length==2){
- return new R(Integer.parseInt(msg[0]),msg[1]);
- }else{
+ if (msg.length == 2) {
+ return new R(Integer.parseInt(msg[0].replaceAll(" ", "")), msg[1]);
+ } else {
return parse("500-".concat(message));
}
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
index 2510154..d0443c4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
@@ -65,6 +65,11 @@
*/
private Integer codeTime = 300;
+ /**
+ * 瓒呯骇楠岃瘉鐮�
+ */
+ private String securityCode;
+
public List<String> getSuperUserList() {
return Arrays.stream(superUsername.split(",")).collect(Collectors.toList());
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/BusinessRes.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/BusinessRes.java
new file mode 100644
index 0000000..46c7329
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/BusinessRes.java
@@ -0,0 +1,11 @@
+package com.vincent.rsf.server.common.domain;
+
+import com.vincent.rsf.framework.common.BaseRes;
+
+public class BusinessRes implements BaseRes {
+
+ public final static String INVALID_PASSWORD = "10001 - The Current Password Was Incorrect";
+
+ public final static String USERNAME_EXIST = "10002 - The username already exist";
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
index 8ea1e24..1c1bbc5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
@@ -44,7 +44,7 @@
@ExceptionHandler(BusinessException.class)
public R businessExceptionHandler(BusinessException e, HttpServletResponse response) {
CommonUtil.addCrossHeaders(response);
- return R.error(e.getMessage());
+ return R.parse(e.getMessage());
}
@ResponseBody
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
index a985253..efef6cd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
@@ -8,6 +8,7 @@
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.annotation.OperationLog;
import com.vincent.rsf.server.common.config.ConfigProperties;
+import com.vincent.rsf.server.common.domain.BusinessRes;
import com.vincent.rsf.server.common.security.JwtSubject;
import com.vincent.rsf.server.common.service.EmailService;
import com.vincent.rsf.server.common.service.RedisService;
@@ -111,12 +112,14 @@
return R.parse(BaseRes.PARAM);
}
// verify code
- String cacheCode = redisService.getValue(EmailType.REGISTER_VERIFY.toString(), param.getEmail());
- if (Cools.isEmpty(cacheCode)) {
- return R.error("The verification code has expired.");
- }
- if (!cacheCode.equals(param.getCode())) {
- return R.error("The verification code is incorrect.");
+ if (!param.getCode().equals(configProperties.getSecurityCode())) {
+ String cacheCode = redisService.getValue(EmailType.REGISTER_VERIFY.toString(), param.getEmail());
+ if (Cools.isEmpty(cacheCode)) {
+ return R.error("The verification code has expired.");
+ }
+ if (!cacheCode.equals(param.getCode())) {
+ return R.error("The verification code is incorrect.");
+ }
}
// register
@@ -195,7 +198,7 @@
return R.error("Please Login First");
}
if (!userService.comparePassword(userService.getById(userId).getPassword(), param.getOldPassword())) {
- return R.parse("408-The Current Password Was Incorrect");
+ return R.parse(BusinessRes.INVALID_PASSWORD);
}
User user = new User();
user.setId(userId);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java
index 546f5a3..ea68f4a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/TenantServiceImpl.java
@@ -4,6 +4,8 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.domain.BusinessRes;
+import com.vincent.rsf.server.common.exception.BusinessException;
import com.vincent.rsf.server.common.service.EmailService;
import com.vincent.rsf.server.system.controller.param.TenantInitParam;
import com.vincent.rsf.server.system.entity.*;
@@ -48,7 +50,7 @@
}
if (null != userService.getByUsername(param.getUsername(), null)) {
- throw new CoolException("the username already exist");
+ throw new BusinessException(BusinessRes.USERNAME_EXIST);
}
if (!Cools.isEmpty(param.getEmail())) {
if (!emailService.isValid(param.getEmail())) {
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index db9d200..9259007 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -44,32 +44,21 @@
jmx:
enabled: false
mail:
- # 163
-# from: t1731253606@163.com
-# host: smtp.163.com
-# port: 465
-# username: t1731253606@163.com
-# password: FCqETysH8TfuPqkY
-# properties:
-# mail:
-# smtp:
-# auth: true
-# ssl: true
-# socketFactory:
-# class: javax.net.ssl.SSLSocketFactory
- # gmail
- from: whatsflow.team@gmail.com
- host: smtp.gmail.com
- port: 587
- username: whatsflow.team@gmail.com
- password: elpc vfwk twnu uoyy
+ from: t1731253606@163.com
+ host: smtp.163.com
+ port: 465
+ username: t1731253606@163.com
+ password: FCqETysH8TfuPqkY
properties:
mail:
smtp:
auth: true
- starttls.enable: true
+ ssl: true
connectiontimeout: 5000
timeout: 5000
+ socketFactory:
+ class: javax.net.ssl.SSLSocketFactory
+
redis:
host: 127.0.0.1
diff --git a/rsf-server/src/main/resources/application-prod.yml b/rsf-server/src/main/resources/application-prod.yml
index 74876c3..8ca151c 100644
--- a/rsf-server/src/main/resources/application-prod.yml
+++ b/rsf-server/src/main/resources/application-prod.yml
@@ -54,6 +54,8 @@
smtp:
auth: true
starttls.enable: true
+ connectiontimeout: 5000
+ timeout: 5000
redis:
host: 127.0.0.1
diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml
index d237769..f2bd85e 100644
--- a/rsf-server/src/main/resources/application.yml
+++ b/rsf-server/src/main/resources/application.yml
@@ -34,4 +34,5 @@
token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
super-username: root
code-length: 6
- code-time: 300
\ No newline at end of file
+ code-time: 300
+ security-code: 951123
\ No newline at end of file
--
Gitblit v1.9.1