From c53926afd6796ade64f1918cfdb242327a518646 Mon Sep 17 00:00:00 2001 From: BBIT-Kai <2911862937@qq.com> Date: Tue, 2 Dec 2025 13:48:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E8=87=AA=E5=8A=A8=E5=88=B7?= =?UTF-8?q?=E6=96=B0RefreshToken=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ink/snowflake/server/controller/User.kt | 1 - .../ink/snowflake/server/utils/TokenUtils.kt | 2 +- .../snowflake/server/utils/plugins/CORS.kt | 1 - readme.md | 2 +- vue/apps/web-antd/src/api/core/auth.ts | 20 ++--- vue/apps/web-antd/src/api/request.ts | 12 ++- vue/apps/web-antd/src/preferences.ts | 3 +- vue/apps/web-antd/src/store/auth.ts | 3 +- .../src/views/cv/sca/CreateYSATaskModal.vue | 86 ------------------- vue/apps/web-antd/src/views/cv/sca/index.vue | 19 +--- .../common-ui/src/ui/authentication/login.vue | 2 +- .../src/request-client/preset-interceptors.ts | 6 +- 12 files changed, 29 insertions(+), 128 deletions(-) delete mode 100644 vue/apps/web-antd/src/views/cv/sca/CreateYSATaskModal.vue diff --git a/ktor/src/main/kotlin/ink/snowflake/server/controller/User.kt b/ktor/src/main/kotlin/ink/snowflake/server/controller/User.kt index f3765b3..02dbaad 100644 --- a/ktor/src/main/kotlin/ink/snowflake/server/controller/User.kt +++ b/ktor/src/main/kotlin/ink/snowflake/server/controller/User.kt @@ -152,7 +152,6 @@ fun Application.User(config: AppConfig) { generateRefreshToken(config, userId) ) ) - BaseResponse(data = generateAccessToken(config, userId)) } catch (ex: Exception) { BaseResponse(status = false, message = "token解析错误", data = null) } diff --git a/ktor/src/main/kotlin/ink/snowflake/server/utils/TokenUtils.kt b/ktor/src/main/kotlin/ink/snowflake/server/utils/TokenUtils.kt index 554e65d..8a32c63 100644 --- a/ktor/src/main/kotlin/ink/snowflake/server/utils/TokenUtils.kt +++ b/ktor/src/main/kotlin/ink/snowflake/server/utils/TokenUtils.kt @@ -21,7 +21,7 @@ object TokenUtils { } fun generateRefreshToken(config: AppConfig, userId: UUID): Token { - return generateToken(config, userId, 10 * 24 * 60 * 60, "refresh_token") + return generateToken(config, userId, 20 * 24 * 60 * 60, "refresh_token") } fun getUserIdByToken(call: ApplicationCall) : UUID{ diff --git a/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt b/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt index a7d2b71..9100d94 100644 --- a/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt +++ b/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt @@ -13,7 +13,6 @@ fun Application.configureCORS() { anyHost() allowHost("localhost:8089") allowHost("127.0.0.1:8089") - allowHost("171.212.101.199:8089") allowHost("ai.ronsunny.cn:8089") // 进一步配置 CORS diff --git a/readme.md b/readme.md index 482b64b..a8312fd 100644 --- a/readme.md +++ b/readme.md @@ -24,7 +24,7 @@ - ### 数据库 - - **Radis**:内存数据库 + - **Redis**:内存数据库 - **PostgreSQL**:实验室业务数据库 - **Milvus**:实验室向量数据库 - **SQLServer**:F8业务数据库 diff --git a/vue/apps/web-antd/src/api/core/auth.ts b/vue/apps/web-antd/src/api/core/auth.ts index 374a698..7957aa1 100644 --- a/vue/apps/web-antd/src/api/core/auth.ts +++ b/vue/apps/web-antd/src/api/core/auth.ts @@ -8,6 +8,7 @@ export namespace AuthApi { account?: string; password?: string; } + /** 注册 */ export interface RegisterParams { account?: string; @@ -29,8 +30,8 @@ export namespace AuthApi { } export interface RefreshTokenResult { - data: string; - status: number; + accessToken: Token; + refreshToken: Token; } } @@ -58,26 +59,23 @@ export async function sendCodeApi(str: string) { export async function registerApi(data: AuthApi.RegisterParams) { // 密码加密 data.password = sha256(data.password?.toString() || ''); - return requestClient.post('/user/register', data); + return requestClient.post('/user/register', data); } /** * 刷新accessToken */ -export async function refreshTokenApi() { - return baseRequestClient.post( - '/user/refreshToken', - { - withCredentials: true, - }, - ); +export async function refreshTokenApi(refreshToken: null | string) { + return requestClient.post('/user/refreshToken', { + refreshToken, + }); } /** * 退出登录 */ export async function logoutApi() { - return baseRequestClient.post('/auth/logout', { + return baseRequestClient.post('/auth/logout', null, { withCredentials: true, }); } diff --git a/vue/apps/web-antd/src/api/request.ts b/vue/apps/web-antd/src/api/request.ts index 2e8fb93..73639e1 100644 --- a/vue/apps/web-antd/src/api/request.ts +++ b/vue/apps/web-antd/src/api/request.ts @@ -53,10 +53,14 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { */ async function doRefreshToken() { const accessStore = useAccessStore(); - const resp = await refreshTokenApi(); - const newToken = resp.data; - accessStore.setAccessToken(newToken); - return newToken; + const resp = await refreshTokenApi(accessStore.refreshToken); + const newAccessToken = resp.accessToken.token; + const newRefreshToken = resp.refreshToken.token; + if (newAccessToken) { + accessStore.setAccessToken(newAccessToken); + accessStore.setRefreshToken(newRefreshToken); + } + return newAccessToken; } function formatToken(token: null | string) { diff --git a/vue/apps/web-antd/src/preferences.ts b/vue/apps/web-antd/src/preferences.ts index 659c1d3..bfec85a 100644 --- a/vue/apps/web-antd/src/preferences.ts +++ b/vue/apps/web-antd/src/preferences.ts @@ -12,7 +12,8 @@ export const overridesPreferences = defineOverridesPreferences({ layout: 'header-sidebar-nav', defaultHomePath: '/workspace', // 默认首页路径 enablePreferences: false, // 是否启用偏好设置 - loginExpiredMode: 'page', // 登录过期模式 不用弹窗登录 跳转到页面登录,防止一些界面不会再加载 + enableRefreshToken: true, // 启动刷新token模式 + loginExpiredMode: 'modal', // 登录过期模式 不用弹窗登录 跳转到页面登录,防止一些界面不会再加载 }, theme: { mode: 'light', diff --git a/vue/apps/web-antd/src/store/auth.ts b/vue/apps/web-antd/src/store/auth.ts index 60acb64..454a632 100644 --- a/vue/apps/web-antd/src/store/auth.ts +++ b/vue/apps/web-antd/src/store/auth.ts @@ -33,11 +33,12 @@ export const useAuthStore = defineStore('auth', () => { let userInfo: null | UserInfo = null; try { loginLoading.value = true; - const { accessToken } = await loginApi(params); + const { accessToken, refreshToken } = await loginApi(params); // 如果成功获取到 accessToken if (accessToken) { accessStore.setAccessToken(accessToken.token); + accessStore.setRefreshToken(refreshToken.token); // 获取用户信息并存储到 accessStore 中 const [fetchUserInfoResult, accessCodes] = await Promise.all([ diff --git a/vue/apps/web-antd/src/views/cv/sca/CreateYSATaskModal.vue b/vue/apps/web-antd/src/views/cv/sca/CreateYSATaskModal.vue deleted file mode 100644 index bc4ce4c..0000000 --- a/vue/apps/web-antd/src/views/cv/sca/CreateYSATaskModal.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - diff --git a/vue/apps/web-antd/src/views/cv/sca/index.vue b/vue/apps/web-antd/src/views/cv/sca/index.vue index dc4ff02..c7b3f0f 100644 --- a/vue/apps/web-antd/src/views/cv/sca/index.vue +++ b/vue/apps/web-antd/src/views/cv/sca/index.vue @@ -3,15 +3,12 @@ import type { EchartsUIType } from '@vben/plugins/echarts'; import { onActivated, onDeactivated, onMounted, ref, watch } from 'vue'; -import { useVbenModal } from '@vben/common-ui'; import { EchartsUI, useEcharts } from '@vben/plugins/echarts'; import { Button, message } from 'ant-design-vue'; import * as api from '#/api'; -import CreateYSATaskModal from './CreateYSATaskModal.vue'; - const list = ref([]); const error = ref(null); const filterKeyword = ref(''); @@ -26,14 +23,6 @@ function refreshList() { loadList(); message.success('列表加载完成'); } -const [BaseModal, baseModalApi] = useVbenModal({ - // 连接抽离的组件 - connectedComponent: CreateYSATaskModal, -}); - -function createTask() { - baseModalApi.open(); -} async function selectItem(item: any) { selectedItem.value = item; @@ -159,18 +148,12 @@ onActivated(() => {