Full authentication in front
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user