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

如何在Next.js中间件中同时使用next-auth与next-intl?

整合next-auth与next-intl中间件的方案

要同时使用next-auth/middleware和next-intl/middleware,核心思路是自定义一个中间件函数,串联执行两个中间件的逻辑,而非直接导出两个默认中间件。以下是具体实现步骤:

实现代码

import { withAuth } from "next-auth/middleware";
import createMiddleware from "next-intl/middleware";

// 初始化next-intl国际化中间件
const intlMiddleware = createMiddleware({
  locales: ["en", "es"],
  defaultLocale: "en"
});

// 初始化next-auth认证中间件,可自定义登录跳转页
const authMiddleware = withAuth({
  pages: {
    signIn: "/login"
  }
});

// 自定义中间件,依次执行国际化和认证逻辑
export default function middleware(req) {
  // 先处理路径国际化(若需重定向到带locale的路径,直接返回结果)
  const intlResponse = intlMiddleware(req);
  if (intlResponse) return intlResponse;
  
  // 国际化处理完成后,执行认证检查
  return authMiddleware(req);
}

// 合并两个中间件的匹配规则,只对符合条件的路径生效
export const config = {
  matcher: [
    "/((?!api|_next|.*\\..*|register|login).*)"
  ]
};

关键说明

  • 中间件执行顺序:优先处理国际化逻辑,确保路径携带正确的locale标识后,再进行认证校验,避免认证跳转时丢失本地化信息。
  • 匹配规则合并:matcher同时排除了两个中间件不需要处理的路径:
    • 排除api、_next、静态文件(.*\\..*)——满足next-intl的跳过规则
    • 额外排除register、login——满足next-auth的跳过规则(登录/注册页无需认证)
  • 避免重定向循环:确保next-auth配置的signIn路径(如/login)在matcher的排除列表中,否则会出现未登录→跳登录页→登录页又触发认证检查的循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:35:12