Fix middleware

This commit is contained in:
Théo 2023-04-12 13:01:54 +02:00
parent a87386fa5b
commit 7aef3f5343
3 changed files with 33 additions and 30 deletions

View file

@ -11,43 +11,22 @@ export async function middleware(req: NextRequest) {
const token = req.cookies.get('token')?.value; const token = req.cookies.get('token')?.value;
let isAuth = false; const isAuth = await validateToken(token);
if (token) { if (!isAuth) {
const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/player/`, {
headers: {
Authorization: `Bearer ${token}`
},
cache: 'no-cache',
next: {
revalidate: 60
}
});
if (response.status === 200) {
isAuth = true;
}
}
if (
(!token || !isAuth) &&
(req.nextUrl.pathname.includes('dashboard') || !req.nextUrl.pathname.includes('event'))
) {
return NextResponse.redirect(getURL('/sign-in'));
}
if (token && !isAuth) {
res.cookies.set('token', '', { res.cookies.set('token', '', {
path: '/', path: '/',
expires: new Date(0) expires: new Date(0)
}); });
NextResponse.redirect(getURL('/sign-in')); if (req.nextUrl.pathname.includes('dashboard') || req.nextUrl.pathname.includes('event')) {
return NextResponse.redirect(getURL('/sign-in'));
}
return res; return res;
} }
if (token && isAuth && req.nextUrl.pathname.includes('sign')) { if (isAuth && req.nextUrl.pathname.includes('sign')) {
return NextResponse.redirect(getURL('/dashboard')); return NextResponse.redirect(getURL('/dashboard'));
} }
@ -60,3 +39,26 @@ export const config = {
'/((?!api|_next/static|_next/image|assets|favicon|sw.js).*)' '/((?!api|_next/static|_next/image|assets|favicon|sw.js).*)'
] ]
}; };
async function validateToken(token: string | undefined) {
if (!token) {
return false;
}
try {
const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/player/`, {
headers: {
Authorization: `Bearer ${token}`
},
cache: 'no-cache',
next: {
revalidate: 60
}
});
return response.ok;
} catch (error) {
console.error('Error validating token:', error);
return false;
}
}

View file

@ -78,12 +78,13 @@ export default function UserAuthForm() {
if (res && res.ok && res.status === 200) { if (res && res.ok && res.status === 200) {
const token = res.headers.get('Authorization')?.split(' ')[1]; const token = res.headers.get('Authorization')?.split(' ')[1];
if (token) if (token) {
cookies.set('token', token, { cookies.set('token', token, {
sameSite: 'strict', sameSite: 'strict',
secure: process.env.NODE_ENV === 'production' secure: process.env.NODE_ENV === 'production'
}); });
router.refresh(); router.refresh();
}
} else if (res && res.status === 400) { } else if (res && res.status === 400) {
setError('passwd', { setError('passwd', {
type: 'manual', type: 'manual',

View file

@ -24,7 +24,7 @@ export default function Usernav({ isOpen, toggle }: { isOpen: boolean; toggle: (
async function handleLogout() { async function handleLogout() {
cookies.remove('token'); cookies.remove('token');
router.replace('/'); router.refresh();
} }
return ( return (