import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' import { HashRouter, Navigate, Route, Routes, useLocation } from 'react-router' import { Refine } from '@refinedev/core' import { dataProvider } from './dataProvider' import { CreatorHubLayout } from './Layout' import { LoginPage } from './LoginPage' import { AccountDetail, AccountList } from './AccountsPage' import { AuditPage } from './AuditPage' import { BrowserCreatePage, BrowserDetail, BrowserList } from './BrowsersPage' import { BrowserImageList } from './BrowserImagesPage' import { DraftPage } from './DraftPage' import { GatewayList } from './GatewaysPage' import { NetworkExitDetail, NetworkExitList } from './NetworkExitsPage' import { TaskDetail, TaskList } from './TasksPage' import { AttemptDetail } from './TracePages' import { CreatorAccountsPage } from './CreatorAccountsPage' import { CreatorCompetitorsPage } from './CreatorCompetitorsPage' import { CreatorSettingsPage } from './CreatorSettingsPage' import { CreatorWorkbenchPage } from './CreatorWorkbenchPage' import 'remixicon/fonts/remixicon.css' import './styles.css' // 开发阶段认证仅由页面层掌握:401 会清除凭证并跳转登录;localStorage 为空时直接展示登录页。 // 不用 useState:HashRouter 的 pushState/replaceState 不触发 hashchange,状态会在导航后过期; // 改为每次渲染直接读 localStorage,登录后 navigate 引发重渲染即可拿到新状态。 const authed = () => localStorage.getItem('creatorhub.auth') !== null function AuthGate({ children }) { const { pathname } = useLocation() const loggedIn = authed() if (!loggedIn && pathname !== '/login') return if (loggedIn && pathname === '/login') return return children } createRoot(document.getElementById('root')).render( } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> , )