46 lines
947 B
TypeScript
46 lines
947 B
TypeScript
import { auth } from "~/auth"
|
|
|
|
const publicRoutes: string[] = [
|
|
// '/',
|
|
]
|
|
|
|
const authRoutes = [
|
|
// '/auth/signup',
|
|
'/auth/signin'
|
|
]
|
|
|
|
export const apiAuthPrefix = "/auth";
|
|
|
|
|
|
export default auth((req) => {
|
|
const { nextUrl } = req
|
|
|
|
|
|
const isLoggedIn = !!req.auth;
|
|
const isPublicRoute = publicRoutes.includes(nextUrl.pathname);
|
|
const isAuthRoute = authRoutes.includes(nextUrl.pathname);
|
|
|
|
const isApiAuthRoute = nextUrl.pathname.startsWith(apiAuthPrefix);
|
|
|
|
if (isApiAuthRoute) {
|
|
return;
|
|
}
|
|
|
|
if (isAuthRoute) {
|
|
if (isLoggedIn) {
|
|
return Response.redirect(new URL('/', nextUrl));
|
|
}
|
|
return null;
|
|
}
|
|
|
|
if (!isLoggedIn && !isPublicRoute) {
|
|
return Response.redirect(new URL("/auth/signin", nextUrl));
|
|
}
|
|
|
|
return null
|
|
})
|
|
|
|
// Read more: https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher
|
|
export const config = {
|
|
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
|
|
} |