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:
@@ -0,0 +1,17 @@
|
||||
import { auth } from "@/lib/auth";
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
export default async function DashboardPage() {
|
||||
// Defense-in-depth session check (layout also checks, this is belt-and-suspenders)
|
||||
const session = await auth();
|
||||
if (!session) redirect("/agent/login");
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h1 className="text-2xl font-semibold text-gray-900">Dashboard</h1>
|
||||
<p className="mt-2 text-gray-500">
|
||||
Welcome back, {session.user?.email}. Portal content coming in Phase 3.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
26
teressa-copeland-homes/src/app/agent/(protected)/layout.tsx
Normal file
26
teressa-copeland-homes/src/app/agent/(protected)/layout.tsx
Normal file
@@ -0,0 +1,26 @@
|
||||
import { auth } from "@/lib/auth";
|
||||
import { redirect } from "next/navigation";
|
||||
import { LogoutButton } from "@/components/ui/LogoutButton";
|
||||
|
||||
export default async function AgentLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
// Defense-in-depth: middleware handles most cases, this catches edge cases
|
||||
const session = await auth();
|
||||
if (!session) redirect("/agent/login");
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-gray-50">
|
||||
<header className="bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between">
|
||||
<span className="text-sm font-medium text-gray-700">Agent Portal</span>
|
||||
<div className="flex items-center gap-4">
|
||||
<span className="text-sm text-gray-500">{session.user?.email}</span>
|
||||
<LogoutButton />
|
||||
</div>
|
||||
</header>
|
||||
<main className="p-6">{children}</main>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user