import { getSessionCookie } from "better-auth/cookies";
import { type NextRequest, NextResponse } from "next/server";
const publicRoutes = ["/", /\/pets\/(?!new).*/];
const guestOnlyRoutes = [
"/login",
"/signup",
"/reset-password",
"/request-password-reset",
];
export async function proxy(request: NextRequest) {
const sessionCookie = getSessionCookie(request);
const pathname = request.nextUrl.pathname;
const isPublicRoute = publicRoutes.some((route) => {
if (typeof route === "string") {
return route === pathname;
}
return route.test(pathname);
});
const isGuestRoute = guestOnlyRoutes.includes(pathname);
const isPrivateRoute = !isGuestRoute && !isPublicRoute;
if (isGuestRoute && sessionCookie) {
const redirectTo = request.nextUrl.searchParams.get("redirect") || "/";
return NextResponse.redirect(new URL(redirectTo, request.url));
}
if (isPrivateRoute && !sessionCookie) {
const redirectUrl = new URL("/login", request.url);
redirectUrl.searchParams.set("redirect", request.nextUrl.pathname);
return NextResponse.redirect(redirectUrl);
}
return NextResponse.next();
}
export const config = {
// API ルート、静的ファイル(static)、Next.jsの内部ファイル(_next)、および拡張子を含むパス(例: .png, .jpg, .css など)を除外し、全てのページルートにミドルウェアを適用します。
// .*\\..* は「ドットを含む任意のファイル名(拡張子付きのファイル)」を意味します。
matcher: "/((?!api|static|.*\\..*|_next).*)",
};