fix(auth): resolve middleware Edge Runtime + layout redirect loop
Two bugs: 1. auth.ts imported postgres (Node.js TCP) which crashes in Edge Runtime, causing Auth.js to silently fall back to redirecting all requests to login. Fix: split into auth.config.ts (Edge-safe, no DB) used by middleware, and auth.ts (full, with DB) used by server components. 2. /agent/layout.tsx applied to /agent/login, so unauthenticated login page visits redirected to themselves in an infinite loop. Fix: moved dashboard + layout into (protected) route group so login page has no auth layout. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,25 +1,9 @@
|
||||
import { auth } from "@/lib/auth";
|
||||
import { NextResponse } from "next/server";
|
||||
import NextAuth from "next-auth";
|
||||
import { authConfig } from "@/lib/auth.config";
|
||||
|
||||
export default auth((req) => {
|
||||
const isLoggedIn = !!req.auth;
|
||||
const isAgentRoute = req.nextUrl.pathname.startsWith("/agent");
|
||||
const isLoginPage = req.nextUrl.pathname === "/agent/login";
|
||||
|
||||
// Protect all /agent/* routes except the login page itself
|
||||
if (isAgentRoute && !isLoginPage && !isLoggedIn) {
|
||||
return NextResponse.redirect(new URL("/agent/login", req.nextUrl.origin));
|
||||
}
|
||||
|
||||
// Redirect already-authenticated users away from the login page
|
||||
if (isLoginPage && isLoggedIn) {
|
||||
return NextResponse.redirect(new URL("/agent/dashboard", req.nextUrl.origin));
|
||||
}
|
||||
});
|
||||
const { auth } = NextAuth(authConfig);
|
||||
export default auth;
|
||||
|
||||
export const config = {
|
||||
matcher: [
|
||||
// Run on /agent/* routes, excluding Next.js internals and static files
|
||||
"/((?!_next/static|_next/image|favicon.ico).*)",
|
||||
],
|
||||
matcher: ["/agent/:path*"],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user