first commit
This commit is contained in:
54
middleware.ts
Normal file
54
middleware.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
// middleware.ts
|
||||
import { NextResponse } from "next/server";
|
||||
import type { NextRequest } from "next/server";
|
||||
|
||||
// کلید کوکی که توکن در آن ذخیره میشود
|
||||
const AUTH_COOKIE_KEY = "userToken"; // <<< این را با نام واقعی کوکی خودتان جایگزین کنید
|
||||
|
||||
export function middleware(request: NextRequest) {
|
||||
const token = request.cookies.get(AUTH_COOKIE_KEY)?.value;
|
||||
const { pathname } = request.nextUrl;
|
||||
|
||||
// مسیرهای عمومی که نیاز به احراز هویت ندارند (مثلا برای لاگین و ثبت نام)
|
||||
const publicPaths = ["/"];
|
||||
|
||||
// اگر کاربر توکن دارد
|
||||
if (token) {
|
||||
// اگر در مسیر لاگین است، به داشبورد هدایت کن
|
||||
if (pathname === "/") {
|
||||
const url = request.nextUrl.clone();
|
||||
url.pathname = "/tickets/create";
|
||||
return NextResponse.redirect(url);
|
||||
}
|
||||
// در غیر این صورت، اجازه دسترسی به مسیر فعلی را بده
|
||||
return NextResponse.next();
|
||||
} else {
|
||||
// اگر کاربر توکن ندارد
|
||||
// اگر در مسیرهای عمومی است، اجازه دسترسی بده
|
||||
if (publicPaths.includes(pathname)) {
|
||||
return NextResponse.next();
|
||||
}
|
||||
// اگر در مسیرهای خصوصی است (مثل داشبورد)، به صفحه لاگین هدایت کن
|
||||
if (pathname.startsWith("/tickets/create")) {
|
||||
const url = request.nextUrl.clone();
|
||||
url.pathname = "/";
|
||||
return NextResponse.redirect(url);
|
||||
}
|
||||
// برای سایر مسیرهای خصوصی ناشناس
|
||||
return NextResponse.next(); // یا هدایت به صفحه لاگین
|
||||
}
|
||||
}
|
||||
|
||||
// تنظیمات middleware: کدام مسیرها را پوشش دهد
|
||||
export const config = {
|
||||
matcher: [
|
||||
/*
|
||||
* Match all request paths except for the ones starting with:
|
||||
* - api (API routes)
|
||||
* - _next/static (static files)
|
||||
* - _next/image (image optimization files)
|
||||
* - favicon.ico (favicon file)
|
||||
*/
|
||||
"/((?!api|_next/static|_next/image|favicon.ico).*)",
|
||||
],
|
||||
};
|
||||
Reference in New Issue
Block a user