add logout

This commit is contained in:
2026-05-28 10:20:11 +03:30
parent fcc6a3733d
commit d0772c4c68
5 changed files with 74 additions and 41 deletions

View File

@@ -2,53 +2,46 @@
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
// کلید کوکی که توکن در آن ذخیره می‌شود
const AUTH_COOKIE_KEY = "userToken"; // <<< این را با نام واقعی کوکی خودتان جایگزین کنید
const AUTH_COOKIE_KEY = "userToken";
// مسیرهای عمومی
const publicPaths = ["/"]; // فرض کردیم "/" صفحه لاگین است
export function middleware(request: NextRequest) {
const token = request.cookies.get(AUTH_COOKIE_KEY)?.value;
const { pathname } = request.nextUrl;
// مسیرهای عمومی که نیاز به احراز هویت ندارند (مثلا برای لاگین و ثبت نام)
const publicPaths = ["/"];
const isPublicPath = publicPaths.includes(pathname);
// اگر کاربر توکن دارد
// اگر کاربر لاگین کرده باشد
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)) {
}
// اگر کاربر توکن نداشته باشد
if (!token) {
// فقط مسیرهای عمومی مجازند
if (isPublicPath) {
return NextResponse.next();
}
// اگر در مسیرهای خصوصی است (مثل داشبورد)، به صفحه لاگین هدایت کن
if (pathname.startsWith("/tickets/create")) {
const url = request.nextUrl.clone();
url.pathname = "/";
return NextResponse.redirect(url);
}
// برای سایر مسیرهای خصوصی ناشناس
return NextResponse.next(); // یا هدایت به صفحه لاگین
// هر مسیر دیگری => ریدایرکت به لاگین
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).*)",
],
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
};