48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
// middleware.ts
|
|
import { NextResponse } from "next/server";
|
|
import type { NextRequest } from "next/server";
|
|
|
|
const AUTH_COOKIE_KEY = "tid";
|
|
|
|
// مسیرهای عمومی
|
|
const publicPaths = ["/"]; // فرض کردیم "/" صفحه لاگین است
|
|
|
|
export function middleware(request: NextRequest) {
|
|
const token = request.cookies.get(AUTH_COOKIE_KEY)?.value;
|
|
const { pathname } = request.nextUrl;
|
|
|
|
const isPublicPath = publicPaths.includes(pathname);
|
|
|
|
// اگر کاربر لاگین کرده باشد
|
|
if (token) {
|
|
// اگر رفت صفحه لاگین، بفرستش داخل پنل
|
|
if (pathname === "/") {
|
|
const url = request.nextUrl.clone();
|
|
url.pathname = "/form";
|
|
return NextResponse.redirect(url);
|
|
}
|
|
|
|
// بقیه مسیرها مجاز
|
|
return NextResponse.next();
|
|
}
|
|
|
|
// اگر کاربر توکن نداشته باشد
|
|
if (!token) {
|
|
// فقط مسیرهای عمومی مجازند
|
|
if (isPublicPath) {
|
|
return NextResponse.next();
|
|
}
|
|
|
|
// هر مسیر دیگری => ریدایرکت به لاگین
|
|
const url = request.nextUrl.clone();
|
|
url.pathname = "/";
|
|
return NextResponse.redirect(url);
|
|
}
|
|
|
|
return NextResponse.next();
|
|
}
|
|
|
|
export const config = {
|
|
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
|
|
};
|