import { NextResponse, type NextRequest } from 'next/server'; const TOKEN_COOKIE = process.env.NEXT_PUBLIC_TOKEN_KEY ?? 'admin_token'; /** * 后台路由鉴权中间件(Edge 运行时) * - /admin/login 放行 * - 其他 /admin 路径无 token cookie → 跳登录 * * 说明:token 真值由前端 adminStore 同步写入 cookie, * 这里仅做"是否已登录"的初步判断,最终有效性由后端 JWT 校验。 */ export function middleware(req: NextRequest): NextResponse { const { pathname, search } = req.nextUrl; if (!pathname.startsWith('/admin')) { return NextResponse.next(); } if (pathname === '/admin/login') { return NextResponse.next(); } const token = req.cookies.get(TOKEN_COOKIE)?.value; if (!token) { const url = req.nextUrl.clone(); url.pathname = '/admin/login'; url.searchParams.set('redirect', encodeURIComponent(pathname + search)); return NextResponse.redirect(url); } return NextResponse.next(); } export const config = { matcher: ['/admin/:path*'], };