diff --git a/react-openapi/src/hooks/useApi.ts b/react-openapi/src/hooks/useApi.ts index 794640a..fc29595 100644 --- a/react-openapi/src/hooks/useApi.ts +++ b/react-openapi/src/hooks/useApi.ts @@ -1,4 +1,5 @@ import axios, { AxiosInstance } from "axios"; +import { tokenStore } from "../../../react-auth/token"; let apiClient: AxiosInstance | null = null; @@ -26,7 +27,6 @@ export function initApi(baseUrl: string, getToken?: () => string | null): AxiosI if (error.response?.status === 401 && getToken) { const currentToken = getToken(); if (currentToken) { - const tokenStore = { clear: () => localStorage.removeItem("token") }; tokenStore.clear(); } } diff --git a/src/RequireAuth.tsx b/src/RequireAuth.tsx new file mode 100644 index 0000000..a0ff87a --- /dev/null +++ b/src/RequireAuth.tsx @@ -0,0 +1,26 @@ +import * as React from "react"; +import { useNavigate } from "react-router-dom"; +import { useAuth, AuthPage } from "../react-auth"; + +export function RequireAuth({ children }: { children: React.ReactNode }) { + const { currentUser, loading, error, login, register } = useAuth(); + const navigate = useNavigate(); + const [mode, setMode] = React.useState<"login" | "register">("login"); + + if (currentUser) { + return <>{children}; + } + + return ( + navigate("/")} + onSwitchMode={() => setMode(mode === "login" ? "register" : "login")} + login={login} + register={register} + loading={loading} + error={error} + currentUser={currentUser} + /> + ); +} diff --git a/src/main.jsx b/src/main.jsx index b71cbf8..3859673 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -16,6 +16,7 @@ import Dashboard from './Dashboard'; import FetchRequests from './FetchRequests'; import FetchRequestDetail from './FetchRequestDetail'; import ReportSnapshots from './ReportSnapshots'; +import { RequireAuth } from './RequireAuth'; import { AppProvider, Admin } from '../react-openapi'; import { Buffer } from 'buffer'; import process from 'process'; @@ -64,7 +65,7 @@ root.render( path={path} element={ path.startsWith("/admin") ? ( - + ) : ( )