From 063905292ca7be6fe28872a1b82f33c4da25ab3b Mon Sep 17 00:00:00 2001 From: bin <719488417@qq.com> Date: Tue, 23 Dec 2025 15:46:38 +0800 Subject: [PATCH] =?UTF-8?q?feat=20:=20=E6=96=B0=E5=A2=9Eurl=E4=B8=ADtoken?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=A4=84=E7=90=86=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.tsx | 82 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 7 deletions(-) diff --git a/src/app.tsx b/src/app.tsx index d5a7ab6..1e2a2f8 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -6,7 +6,7 @@ import type { RunTimeLayoutConfig } from '@umijs/max'; import { history } from '@umijs/max'; import defaultSettings from '../config/defaultSettings'; import { errorConfig } from './requestErrorConfig'; -import { clearSessionToken, getAccessToken, getRefreshToken, getTokenExpireTime } from './access'; +import { clearSessionToken, getAccessToken,setSessionToken, getRefreshToken, getTokenExpireTime } from './access'; import { getRemoteMenu, getRoutersInfo, @@ -64,12 +64,53 @@ export async function getInitialState(): Promise<{ } as API.CurrentUser; } catch (error) { console.log(error); + // 如果获取用户信息失败,清除token并跳转到登录页 + clearSessionToken(); history.push(PageEnum.LOGIN); } return undefined; }; - // 如果不是登录页面,执行 + + // 检查URL参数中是否包含token参数 const { location } = history; + const urlParams = new URL(window.location.href).searchParams; + const tokenFromUrl = urlParams.get('token'); + + if (tokenFromUrl) { + try { + // 处理token,去掉Bearer前缀(如果存在) + let processedToken = tokenFromUrl.trim(); + if (processedToken.startsWith('Bearer ')) { + processedToken = processedToken.substring(7); + } + + // 设置token( + const current = new Date(); + const expireTime = current.setTime(current.getTime() + 1000 * 12 * 60 * 60); // 12小时过期 + setSessionToken(processedToken, processedToken, expireTime); + + // 尝试获取用户信息 + const currentUser = await fetchUserInfo(); + if (currentUser) { + // 成功获取用户信息,清除URL中的token参数并跳转 + const newSearch = new URLSearchParams(urlParams); + newSearch.delete('token'); + history.push(urlParams.get('redirect') || '/'); + setTimeout(() => history.go(0), 0); + + return { + fetchUserInfo, + currentUser, + settings: defaultSettings as Partial, + }; + } + } catch (error) { + console.error('处理URL token失败:', error); + clearSessionToken(); + } + } + + // 如果不是登录页面且没有token参数,正常执行 if (location.pathname !== PageEnum.LOGIN) { const currentUser = await fetchUserInfo(); return { @@ -78,6 +119,7 @@ export async function getInitialState(): Promise<{ settings: defaultSettings as Partial, }; } + return { fetchUserInfo, settings: defaultSettings as Partial, @@ -116,6 +158,17 @@ export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) = footerRender: () =>