redirect based on cookie

This commit is contained in:
Guillaume Dorce 2022-09-16 19:20:54 +02:00
parent af82736c1e
commit c42cbf6b76
3 changed files with 27 additions and 22 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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);