refactor: separate authentication routes from public routes and adjust middleware redirection logic.
This commit is contained in:
@@ -1,14 +1,21 @@
|
||||
import { auth } from "@/auth";
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
// Public routes that don't require authentication
|
||||
const publicRoutes = ["/login", "/signup", "/forgot-password", "/reset-password", "/verify-email", "/contact"];
|
||||
// Auth routes - logged-in users should be redirected away from these
|
||||
const authRoutes = ["/login", "/signup", "/forgot-password", "/reset-password", "/verify-email"];
|
||||
|
||||
// Public routes - accessible to everyone (logged in or not)
|
||||
const publicRoutes = ["/", "/contact", "/about", "/faq"];
|
||||
|
||||
export default auth((req) => {
|
||||
const { nextUrl } = req;
|
||||
const isLoggedIn = !!req.auth;
|
||||
const userRole = (req.auth?.user as any)?.role;
|
||||
|
||||
const isAuthRoute = authRoutes.some(
|
||||
(route) => nextUrl.pathname === route || nextUrl.pathname.startsWith(route + "/")
|
||||
);
|
||||
|
||||
const isPublicRoute = publicRoutes.some(
|
||||
(route) => nextUrl.pathname === route || nextUrl.pathname.startsWith(route + "/")
|
||||
);
|
||||
@@ -26,14 +33,19 @@ export default auth((req) => {
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
// Redirect logged-in users away from public routes (login, signup)
|
||||
if (isLoggedIn && isPublicRoute) {
|
||||
// Allow access to public routes for everyone
|
||||
if (isPublicRoute) {
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
// Redirect logged-in users away from auth routes (login, signup, etc.)
|
||||
if (isLoggedIn && isAuthRoute) {
|
||||
// Redirect to home page instead of dashboard
|
||||
return NextResponse.redirect(new URL("/", nextUrl.origin));
|
||||
}
|
||||
|
||||
// Redirect non-logged-in users to login page for protected routes
|
||||
if (!isLoggedIn && !isPublicRoute) {
|
||||
if (!isLoggedIn && !isAuthRoute) {
|
||||
const loginUrl = new URL("/login", nextUrl.origin);
|
||||
loginUrl.searchParams.set("callbackUrl", nextUrl.pathname);
|
||||
return NextResponse.redirect(loginUrl);
|
||||
|
||||
Reference in New Issue
Block a user