43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import authConfig from '@/lib/auth.config';
|
|
import NextAuth from 'next-auth';
|
|
import { NextResponse } from 'next/server';
|
|
|
|
const publicRoutes = ['/'];
|
|
|
|
const { auth } = NextAuth(authConfig);
|
|
|
|
export default auth(async function middleware(req: any) {
|
|
const { nextUrl, auth } = req;
|
|
const isLoggedIn = !!auth?.user;
|
|
|
|
// Ruta solicitada
|
|
const requestedPath = nextUrl.pathname;
|
|
// Permitir siempre el acceso a las rutas de API
|
|
if (requestedPath.startsWith('/api')) {
|
|
return NextResponse.next();
|
|
}
|
|
|
|
if (requestedPath.startsWith('/dashboard') && !isLoggedIn) {
|
|
return NextResponse.redirect(new URL('/', nextUrl));
|
|
}
|
|
|
|
// Redirigir si el usuario está logueado y está intentando acceder a rutas públicas
|
|
if (
|
|
(isLoggedIn && publicRoutes.includes(requestedPath)) ||
|
|
(isLoggedIn && requestedPath.startsWith('/codigo'))
|
|
) {
|
|
return NextResponse.redirect(new URL('/dashboard', nextUrl));
|
|
}
|
|
|
|
return NextResponse.next();
|
|
} as any);
|
|
|
|
export const config = {
|
|
matcher: [
|
|
// Skip Next.js internals and all static files, unless found in search params
|
|
'/((?!_next|[^?]*\\.(?:html?|css|js(?!on)|jpe?g|webp|png|gif|svg|ttf|woff2?|ico|csv|docx?|xlsx?|zip|webmanifest)).*)',
|
|
// Always run for API routes
|
|
'/(api|trpc)(.*)',
|
|
],
|
|
};
|