import { Layout, Menu, theme } from 'antd'; import { useState } from 'react'; import { Navigate, Route, Routes, useLocation, useNavigate } from 'react-router-dom'; import Login from './pages/Login'; import SSOLogin from './pages/SSOLogin'; import Services from './pages/Services'; import Stats from './pages/Stats'; import Tokens from './pages/Tokens'; import { clearSession, getUserInfo } from './services/iamAuth'; const { Header, Content, Sider } = Layout; /** 登录守卫:sessionStorage 无 userToken 则跳登录页(携带来源路径,登录后回跳) */ function RequireAuth({ children }: { children: React.ReactNode }) { const location = useLocation(); const token = sessionStorage.getItem('userToken'); if (!token) { return ; } return <>{children}; } function AppLayout() { const nav = useNavigate(); const loc = useLocation(); const [collapsed, setCollapsed] = useState(false); const { token: { colorBgContainer }, } = theme.useToken(); const userInfo = getUserInfo(); const displayName = userInfo?.userName || userInfo?.userId || ''; return (
MCP Auth
nav(key)} />
MCP Token 鉴权管理后台 {displayName} ·{' '} { clearSession(); nav('/login', { replace: true }); }} > 退出
} /> } /> } /> } />
); } export default function App() { // 路由变化时重渲染,重读 sessionStorage 登录态 useLocation(); return ( } /> } /> } /> ); }