You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 14 App Router中NextAuth与next-i18n-router中间件冲突问题

问题根源

你当前的代码同时导出了NextAuth的认证中间件(作为默认导出)和自定义的i18n路由中间件,这在Next.js中是不允许的——一个middleware.ts文件只能生效一个中间件逻辑,后者会直接覆盖前者,导致NextAuth的认证逻辑完全无法执行。

解决方案

把两个中间件的逻辑合并到同一个函数中,优先执行认证检查,再处理多语言路由:

// middleware.ts
import NextAuth from 'next-auth';
import { authConfig } from './auth.config';
import { i18nRouter } from 'next-i18n-router';
import i18nConfig from './i18nConfig';
import { NextRequest } from 'next/server';

// 初始化NextAuth认证中间件
const authMiddleware = NextAuth(authConfig).auth;

export async function middleware(request: NextRequest) {
  // 先执行认证检查逻辑
  const authResponse = await authMiddleware(request);
  // 如果认证中间件返回了响应(比如未登录时重定向到登录页),直接返回该响应
  if (authResponse) {
    return authResponse;
  }
  // 认证通过或当前路径无需认证时,处理多语言路由
  return i18nRouter(request, i18nConfig);
}

export const config = {
  matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)'],
};
关键说明
  • 优先调用NextAuth的认证中间件并等待执行完成,确保认证逻辑先被处理
  • 若认证中间件返回了Response对象(比如重定向),直接返回该对象,终止后续逻辑
  • 只有当认证检查通过或当前路径不需要认证时,才执行i18nRouter的多语言路由处理

内容的提问来源于stack exchange,提问作者Francisco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:31:03