Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/middleware.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NextRequest, NextResponse } from "next/server";
import { logger } from "@/lib/logger";
import { isDevelopment } from "@/lib/config/env.schema";
import { validateKey } from "@/lib/auth";

const PUBLIC_PATHS = [
"/login",
Expand All @@ -13,7 +14,7 @@ const PUBLIC_PATHS = [

const API_PROXY_PATH = "/v1";

export function middleware(request: NextRequest) {
export async function middleware(request: NextRequest) {
const method = request.method;
const pathname = request.nextUrl.pathname;

Expand Down Expand Up @@ -43,6 +44,18 @@ export function middleware(request: NextRequest) {
return NextResponse.redirect(url);
}

// 验证 key 的完整权限(包括 canLoginWebUi、isEnabled、expiresAt 等)
const session = await validateKey(authToken.value);
if (!session) {
// Key 无效或权限不足,清除 cookie 并重定向到登录页
const url = request.nextUrl.clone();
url.pathname = "/login";
url.searchParams.set("from", pathname);
const response = NextResponse.redirect(url);
response.cookies.delete("auth-token");
return response;
}

return NextResponse.next();
}

Expand Down
Loading