From 65aba4b313f3be6490cd538eb765b1d03077b2cc Mon Sep 17 00:00:00 2001 From: yueli Date: Mon, 3 Aug 2026 09:22:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20token=20=E5=88=B7=E6=96=B0=E6=97=B6?= =?UTF-8?q?=E7=BC=BA=E5=B0=91=20company=5Fname=20=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=A4=9A=E7=A7=9F=E6=88=B7=E8=BF=87=E6=BB=A4=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=A9=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/services/auth_service.py | 9 +++++--- inventory-web/src/App.vue | 21 ++----------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/inventory-backend/app/services/auth_service.py b/inventory-backend/app/services/auth_service.py index d6b9f3e..734fa8a 100644 --- a/inventory-backend/app/services/auth_service.py +++ b/inventory-backend/app/services/auth_service.py @@ -162,22 +162,25 @@ class AuthService: if not user_id: raise ValueError("无效的 refresh_token") - # 重新查询数据库获取用户的 display_name,避免刷新后丢失 + # 重新查询数据库获取用户的 display_name + company_name,避免刷新后丢失 from app.models.system import SysUser user = SysUser.query.get(user_id) if user: user_info = user.to_dict() display_name = user_info.get('display_name', username) + user_company = user.department or '' else: display_name = username + user_company = '' - # 生成新的 access_token + # 生成新的 access_token(必须包含 company_name,否则多租户过滤失效) new_access_token = create_access_token( identity=user_id, additional_claims={ 'role': role, 'username': username, - 'display_name': display_name + 'display_name': display_name, + 'company_name': user_company } ) diff --git a/inventory-web/src/App.vue b/inventory-web/src/App.vue index da687da..95a41d3 100644 --- a/inventory-web/src/App.vue +++ b/inventory-web/src/App.vue @@ -16,28 +16,11 @@ const isLoginPage = computed(() => { }) // 页面加载时刷新权限 -onMounted(async () => { +onMounted(() => { if (userStore.token) { - // ★ 如果 access_token 可能已过期,先主动用 refresh_token 换新 token - // 避免后续 API 调用触发 401 → 刷新 → 重试的竞态导致权限空白 - try { - const refreshTokenValue = localStorage.getItem('refresh_token') - if (refreshTokenValue) { - const res = await fetch('/api/v1/auth/refresh', { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ refresh_token: refreshTokenValue }) - }) - if (res.ok) { - const data = await res.json() - if (data.access_token) { - userStore.setToken(data.access_token) - } - } - } - } catch (e) { /* 静默,失败时走正常 401 刷新流程 */ } userStore.refreshUserPermissions() } + // 当 Vue 根组件挂载完毕,确保 Dify 图标一定会被加载 if (typeof (window as any).initDifyChatbot === 'function') { (window as any).initDifyChatbot() }