redirect based on cookie
This commit is contained in:
parent
af82736c1e
commit
c42cbf6b76
|
|
@ -4,28 +4,38 @@ import Login from './routes/login';
|
||||||
import Home from './routes/home';
|
import Home from './routes/home';
|
||||||
import { CookiesProvider, useCookies } from 'react-cookie';
|
import { CookiesProvider, useCookies } from 'react-cookie';
|
||||||
import Signup from './routes/signup';
|
import Signup from './routes/signup';
|
||||||
import { useEffect, useState } from 'react';
|
|
||||||
|
|
||||||
// Create a client
|
// Create a client
|
||||||
const queryClient = new QueryClient();
|
const queryClient = new QueryClient();
|
||||||
|
|
||||||
export default () => {
|
const Auth = ({route}: {route: string}) => {
|
||||||
const [auth, setAuth] = useState(false);
|
const [cookies] = useCookies(['token']);
|
||||||
const [cookies, setCookie, removeCookie] = useCookies(['token']);
|
|
||||||
useEffect(() => {
|
|
||||||
if (cookies.token) {
|
|
||||||
setAuth(true);
|
|
||||||
}
|
|
||||||
}, [cookies.token]);
|
|
||||||
|
|
||||||
|
if (cookies.token && route === 'login') {
|
||||||
|
return <Navigate to="/home" />;
|
||||||
|
} else if (!cookies.token && route === 'home') {
|
||||||
|
return <Navigate to="/login" />;
|
||||||
|
} else if (cookies.token && route === 'signup') {
|
||||||
|
return <Navigate to="/home" />;
|
||||||
|
} else if (cookies.token && route === 'home') {
|
||||||
|
return <Home/>;
|
||||||
|
} else if (!cookies.token && route === 'login') {
|
||||||
|
return <Login/>;
|
||||||
|
} else if (!cookies.token && route === 'signup') {
|
||||||
|
return <Signup/>;
|
||||||
|
}
|
||||||
|
return <Navigate to="/login" />;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default () => {
|
||||||
return (
|
return (
|
||||||
<BrowserRouter>
|
<BrowserRouter>
|
||||||
<QueryClientProvider client={queryClient}>
|
<QueryClientProvider client={queryClient}>
|
||||||
<CookiesProvider>
|
<CookiesProvider>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path="/login" element={auth ? <Navigate to="/home" /> : <Login />} />
|
<Route path="/login" element={<Auth route="login"/>} />
|
||||||
<Route path="/signup" element={auth ? <Navigate to="/home" /> : <Signup />} />
|
<Route path="/signup" element={<Auth route="signup"/>} />
|
||||||
<Route path="/home" element={!auth ? <Navigate to="/login" /> : <Home />} />
|
<Route path="/home" element={<Auth route="home"/>} />
|
||||||
</Routes>
|
</Routes>
|
||||||
<Outlet />
|
<Outlet />
|
||||||
</CookiesProvider>
|
</CookiesProvider>
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,8 @@ const AppHeader = () => {
|
||||||
});
|
});
|
||||||
const [cookies, setCookie, removeCookie] = useCookies(['token']);
|
const [cookies, setCookie, removeCookie] = useCookies(['token']);
|
||||||
|
|
||||||
const logOut = async () => {
|
const logOut = () => {
|
||||||
console.log(cookies);
|
|
||||||
removeCookie('token');
|
removeCookie('token');
|
||||||
window.location.href = '/login';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -51,7 +49,7 @@ const AppHeader = () => {
|
||||||
className="group relative flex w-auto justify-center rounded-md border border-red bg-red py-2 px-2 text-sm font-medium text-white hover:bg-white hover:text-red focus:outline-none focus:ring-2 focus:ring-red focus:ring-offset-2"
|
className="group relative flex w-auto justify-center rounded-md border border-red bg-red py-2 px-2 text-sm font-medium text-white hover:bg-white hover:text-red focus:outline-none focus:ring-2 focus:ring-red focus:ring-offset-2"
|
||||||
onClick={() => logOut()}
|
onClick={() => logOut()}
|
||||||
>
|
>
|
||||||
Deonnexion
|
Deconnexion
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
import { Link, Navigate, useNavigate } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import logo from '@assets/images/logo.svg';
|
import logo from '@assets/images/logo.svg';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { useEffect, useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { useCookies } from 'react-cookie';
|
import { useCookies } from 'react-cookie';
|
||||||
import type { Token } from '../types';
|
import type { Token } from '../types';
|
||||||
import { useAuth } from '../controllers/Auth';
|
|
||||||
|
|
||||||
const Login = () => {
|
const Login = () => {
|
||||||
const [email, setEmail] = useState('');
|
const [email, setEmail] = useState('');
|
||||||
const [password, setPassword] = useState('');
|
const [password, setPassword] = useState('');
|
||||||
const [cookies, setCookie, removeCookie] = useCookies(['token']);
|
const [cookies, setCookie] = useCookies(['token']);
|
||||||
|
|
||||||
const { refetch } = useQuery(
|
const { refetch } = useQuery(
|
||||||
['login'],
|
['login'],
|
||||||
|
|
@ -26,9 +25,7 @@ const Login = () => {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
onSuccess: (data: Token) => {
|
onSuccess: (data: Token) => {
|
||||||
console.log(data);
|
|
||||||
setCookie('token', data.token, { path: '/', expires: new Date(data.expiresAt) });
|
setCookie('token', data.token, { path: '/', expires: new Date(data.expiresAt) });
|
||||||
window.location.href = '/home';
|
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
onError: (error) => {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue