feat(03-01): protect /portal routes and update post-login redirect
- middleware.ts: add /portal/:path* to matcher array - auth.config.ts: add isPortalRoute check, redirect unauthenticated to /agent/login - auth.config.ts: change post-login redirect from /agent/dashboard to /portal/dashboard - agent dashboard page: replace stub with redirect to /portal/dashboard
This commit is contained in:
@@ -5,5 +5,5 @@ const { auth } = NextAuth(authConfig);
|
|||||||
export default auth;
|
export default auth;
|
||||||
|
|
||||||
export const config = {
|
export const config = {
|
||||||
matcher: ["/agent/:path*"],
|
matcher: ["/agent/:path*", "/portal/:path*"],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,17 +1,5 @@
|
|||||||
import { auth } from "@/lib/auth";
|
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function DashboardPage() {
|
export default function DashboardPage() {
|
||||||
// Defense-in-depth session check (layout also checks, this is belt-and-suspenders)
|
redirect("/portal/dashboard");
|
||||||
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>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,10 @@ export const authConfig = {
|
|||||||
const isLoggedIn = !!auth?.user;
|
const isLoggedIn = !!auth?.user;
|
||||||
const isLoginPage = nextUrl.pathname === "/agent/login";
|
const isLoginPage = nextUrl.pathname === "/agent/login";
|
||||||
const isAgentRoute = nextUrl.pathname.startsWith("/agent");
|
const isAgentRoute = nextUrl.pathname.startsWith("/agent");
|
||||||
|
const isPortalRoute = nextUrl.pathname.startsWith("/portal");
|
||||||
|
|
||||||
if (isLoginPage) {
|
if (isLoginPage) {
|
||||||
if (isLoggedIn) return Response.redirect(new URL("/agent/dashboard", nextUrl.origin));
|
if (isLoggedIn) return Response.redirect(new URL("/portal/dashboard", nextUrl.origin));
|
||||||
return true; // Always allow unauthenticated access to login page
|
return true; // Always allow unauthenticated access to login page
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,6 +31,10 @@ export const authConfig = {
|
|||||||
return isLoggedIn; // Redirect unauthenticated users to login
|
return isLoggedIn; // Redirect unauthenticated users to login
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isPortalRoute) {
|
||||||
|
if (!isLoggedIn) return Response.redirect(new URL("/agent/login", nextUrl));
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
jwt({ token, user }) {
|
jwt({ token, user }) {
|
||||||
|
|||||||
Reference in New Issue
Block a user