Full authentication in front

This commit is contained in:
2025-04-07 02:33:27 +02:00
parent cd248c4aa9
commit 738a9bebf0
52 changed files with 7399 additions and 2199 deletions

View File

@@ -1,61 +1,75 @@
//https://www.robinwieruch.de/react-router-private-routes/
import {Authenticated, GitHubBanner, Refine, WelcomePage} from "@refinedev/core";
import { DevtoolsPanel, DevtoolsProvider } from "@refinedev/devtools";
import { RefineKbar, RefineKbarProvider } from "@refinedev/kbar";
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import {
RefineSnackbarProvider, RefineThemes,
useNotificationProvider,
} from "@refinedev/mui";
import {createBrowserRouter, Link, Route, RouterProvider, Routes} from "react-router";
import { EntityList } from "./pages/entities/List.tsx";
import {ProtectedRoute} from "./pages/auth/ProtectedRoute.tsx";
import CssBaseline from "@mui/material/CssBaseline";
import GlobalStyles from "@mui/material/GlobalStyles";
import routerBindings, {
CatchAllNavigate,
DocumentTitleHandler,
UnsavedChangesNotifier,
} from "@refinedev/react-router";
import dataProvider from "@refinedev/simple-rest";
import {BrowserRouter, Outlet, Route, Routes, Catch} from "react-router";
import { authProvider } from "./providers/auth-provider";
import { ColorModeContextProvider } from "./contexts/color-mode";
import {Login} from "./pages/login";
import {Register} from "./pages/register";
import {ForgotPassword} from "./pages/forgotPassword";
import {Header} from "./components";
import {ThemeProvider} from "@mui/material/styles";
import {UpdatePassword} from "./pages/updatePassword";
function App() {
const [user, setUser] = useState<AuthUser | null>(null)
const [count, setCount] = useState(0)
const router = createBrowserRouter([
{
path: "/",
element: <div><Link to={"/entities/list"}>To the list</Link></div>,
},
{
path: "/entities/list",
element: <EntityList />,
},
]);
return (
<>
<RouterProvider router={router}>
</RouterProvider>
<Routes>
<Route index element={ <h1>INDEX</h1> } />
<Route element={ <ProtectedRoute user={user} /> }>
<Route path="toto" element={ <h1>PROTECTED ROUTE</h1>} />
</Route>
</Routes>
<div>
<a href="https://vite.dev" target="_blank">
<img src={viteLogo} className="logo" alt="Vite logo" />
</a>
<a href="https://react.dev" target="_blank">
<img src={reactLogo} className="logo react" alt="React logo" />
</a>
</div>
<h1>Vite + React</h1>
<div className="card">
<button onClick={() => setCount((count) => count + 1)}>
count is {count}
</button>
<p>
Edit <code>src/App.tsx</code> and save to test HMR
</p>
</div>
<p className="read-the-docs">
Click on the Vite and React logos to learn more
</p>
</>
)
<BrowserRouter>
<ThemeProvider theme={RefineThemes.Blue}>
<ColorModeContextProvider>
<CssBaseline />
<GlobalStyles styles={{ html: { WebkitFontSmoothing: "auto" } }} />
<RefineSnackbarProvider>
<Refine
authProvider={authProvider}
dataProvider={dataProvider("https://api.fake-rest.refine.dev")}
notificationProvider={useNotificationProvider}
routerProvider={routerBindings}
options={{
syncWithLocation: true,
warnWhenUnsavedChanges: true,
useNewQueryKeys: true,
disableTelemetry: true
}}
>
<Header />
<Routes>
<Route
element={(
<Authenticated key="authenticated-routes" redirectOnFail="/login" fallback={<CatchAllNavigate to="/login"/>}>
<Outlet />
</Authenticated>
)}
>
<Route path="/toto" element={<h1>Where are in</h1>} />
</Route>
<Route index element={<h1>HOME</h1>} />
<Route path="/login" element={<Login />} />
<Route path="/register" element={<Register />} />
<Route path="/forgot-password" element={<ForgotPassword />} />
<Route path="/update-password" element={<UpdatePassword />} />
</Routes>
<UnsavedChangesNotifier />
<DocumentTitleHandler />
</Refine>
</RefineSnackbarProvider>
</ColorModeContextProvider>
</ThemeProvider>
</BrowserRouter>
);
}
export default App
export default App;