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 "../shared/api/dataProvider"; import { CreatorHubLayout } from "./Layout"; import { LoginPage } from "./LoginPage"; import { AccountCreatePage, AccountDetail, AccountList } from "../features/accounts/AccountsPage"; import { AccountEditPage } from "../features/accounts/AccountEditPage"; import { CreatorCompetitorsPage } from "../features/creator/competitors/CreatorCompetitorsPage"; import { CreatorSettingsPage } from "../features/creator/settings/CreatorSettingsPage"; import { CreatorWorkbenchPage } from "../features/creator/workbench/CreatorWorkbenchPage"; import { AuditPage } from "../features/operations/AuditPage"; import { BrowserCreatePage, BrowserDetail, BrowserList } from "../features/environments/BrowsersPage"; import { BrowserVersionList } from "../features/environments/BrowserVersionsPage"; import { DraftPage } from "../features/operations/DraftPage"; import { GatewayList } from "../features/environments/GatewaysPage"; import { NetworkExitDetail, NetworkExitList } from "../features/environments/NetworkExitsPage"; import { TaskDetail, TaskList } from "../features/operations/TasksPage"; import { AttemptDetail } from "../features/operations/TracePages"; 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( } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> , );