fix: fix logout + fix protected route
This commit is contained in:
14
src/app/providers/ProtectedRoute.tsx
Normal file
14
src/app/providers/ProtectedRoute.tsx
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import { Navigate, Outlet, useLocation } from 'react-router-dom'
|
||||||
|
import { useIsAuthenticated } from '@features/auth'
|
||||||
|
import { ROUTES } from '@shared/config/routes'
|
||||||
|
|
||||||
|
export function ProtectedRoute() {
|
||||||
|
const isAuthenticated = useIsAuthenticated()
|
||||||
|
const location = useLocation()
|
||||||
|
|
||||||
|
if (!isAuthenticated) {
|
||||||
|
return <Navigate to={ROUTES.LOGIN} state={{ from: location }} replace />
|
||||||
|
}
|
||||||
|
|
||||||
|
return <Outlet />
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import { RegisterPage } from '@pages/register'
|
|||||||
import { SeedPhrasePage } from '@pages/seed-phrase'
|
import { SeedPhrasePage } from '@pages/seed-phrase'
|
||||||
import { ROUTES } from '@shared/config/routes'
|
import { ROUTES } from '@shared/config/routes'
|
||||||
import { ScrollToTop } from './ScrollToTop'
|
import { ScrollToTop } from './ScrollToTop'
|
||||||
|
import { ProtectedRoute } from './ProtectedRoute'
|
||||||
|
|
||||||
export function RouterProvider() {
|
export function RouterProvider() {
|
||||||
return (
|
return (
|
||||||
@@ -15,12 +16,15 @@ export function RouterProvider() {
|
|||||||
<ScrollToTop />
|
<ScrollToTop />
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path={ROUTES.HOME} element={<HomePage />} />
|
<Route path={ROUTES.HOME} element={<HomePage />} />
|
||||||
<Route path={ROUTES.WALLET} element={<WalletPage />} />
|
|
||||||
<Route path={ROUTES.SWAP} element={<SwapPage />} />
|
|
||||||
<Route path={ROUTES.PROFILE} element={<ProfilePage />} />
|
|
||||||
<Route path={ROUTES.LOGIN} element={<LoginPage />} />
|
<Route path={ROUTES.LOGIN} element={<LoginPage />} />
|
||||||
<Route path={ROUTES.REGISTER} element={<RegisterPage />} />
|
<Route path={ROUTES.REGISTER} element={<RegisterPage />} />
|
||||||
<Route path={ROUTES.SEED_PHRASE} element={<SeedPhrasePage />} />
|
|
||||||
|
<Route element={<ProtectedRoute />}>
|
||||||
|
<Route path={ROUTES.WALLET} element={<WalletPage />} />
|
||||||
|
<Route path={ROUTES.SWAP} element={<SwapPage />} />
|
||||||
|
<Route path={ROUTES.PROFILE} element={<ProfilePage />} />
|
||||||
|
<Route path={ROUTES.SEED_PHRASE} element={<SeedPhrasePage />} />
|
||||||
|
</Route>
|
||||||
</Routes>
|
</Routes>
|
||||||
</BrowserRouter>
|
</BrowserRouter>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { api } from '@shared/api/base'
|
import { api } from '@shared/api/base'
|
||||||
|
import { getCsrfToken } from '@shared/api/csrf'
|
||||||
|
|
||||||
export interface RegistrationStartPayload {
|
export interface RegistrationStartPayload {
|
||||||
email: string
|
email: string
|
||||||
@@ -19,6 +20,7 @@ export function registrationComplete(payload: RegistrationCompletePayload): Prom
|
|||||||
return api.post<string>('/auth/registration/complete', payload)
|
return api.post<string>('/auth/registration/complete', payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function logout(): Promise<void> {
|
export async function logout(): Promise<void> {
|
||||||
return api.post<void>('/logout', {})
|
const csrfToken = await getCsrfToken()
|
||||||
|
return api.post<void>('/logout', { _csrf: csrfToken })
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user