From afef6d98659910fba80928fbfa8c14c3cd4a87bf Mon Sep 17 00:00:00 2001 From: shinya Date: Mon, 30 Jun 2025 22:57:32 +0800 Subject: [PATCH] fix: middleware --- Dockerfile | 2 +- src/middleware.ts | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index fb3e839..4e6df33 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ COPY . . # 在构建阶段也显式设置 DOCKER_ENV, # 确保 Next.js 在编译时即选择 Node Runtime 而不是 Edge Runtime -RUN find ./src -type f -print0 \ +RUN find ./src -type f -name "route.ts" -print0 \ | xargs -0 sed -i "s/export const runtime = 'edge';/export const runtime = 'nodejs';/g" ENV DOCKER_ENV=true diff --git a/src/middleware.ts b/src/middleware.ts index 970e4cf..8182c85 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,7 +1,5 @@ import { NextRequest, NextResponse } from 'next/server'; -export const runtime = 'edge'; - // 全站(含 /api)鉴权中间件,运行于 Edge Runtime。 export async function middleware(req: NextRequest) { const { pathname, search } = req.nextUrl; @@ -20,12 +18,18 @@ export async function middleware(req: NextRequest) { return NextResponse.next(); } + // 内部请求标记,避免递归拦截 + if (req.headers.get('x-internal-auth') === 'true') { + return NextResponse.next(); + } + // 通过后端接口验证登录状态(GET /api/login) const origin = req.nextUrl.origin; const verifyRes = await fetch(`${origin}/api/login`, { method: 'GET', headers: { Cookie: req.headers.get('cookie') || '', + 'x-internal-auth': 'true', }, }); @@ -47,6 +51,6 @@ export async function middleware(req: NextRequest) { // 2. 指定哪些路径使用 middleware export const config = { matcher: [ - '/((?!_next/static|_next/image|favicon.ico|manifest.json|icons|logo.png|screenshot.png).*)', + '/((?!_next/static|_next/image|favicon.ico|manifest.json|icons|logo.png|screenshot.png|api/login).*)', ], };