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

NextAuth.js + Next.js13自定义登录页与Middleware重定向循环问题

NextAuth.js + Next.js 13 自定义登录页重定向循环问题解决

问题原因

启用NextAuth的默认Middleware后,它会默认保护所有路由,包括你配置的自定义登录页/login。触发循环的完整流程:

  1. 未登录用户访问受保护路由,Middleware将其重定向到NextAuth默认的/auth/signin
  2. 由于你在NextAuth配置中设置了pages.signIn: '/login',NextAuth会将用户跳转至自定义登录页/login
  3. 但Middleware检测到用户未登录,又会把/login的请求重定向回/auth/signin,形成无限循环

从你提供的响应头也能验证这一点:/login请求被重定向到/api/auth/signin,且callbackUrl嵌套了/login的地址,说明循环已经在叠加参数。

解决方法

方法1:自定义Middleware,排除登录页路由

不要直接导出默认的NextAuth Middleware,而是通过withAuth自定义Middleware,明确排除登录页和NextAuth的认证接口路径:

import { withAuth } from "next-auth/middleware"

export default withAuth({
  pages: {
    signIn: "/login", // 和你的NextAuth配置保持一致
  },
})

// 配置匹配规则:保护除login、api/auth之外的所有路由
export const config = {
  matcher: ["/((?!login|api/auth).*)"],
}
  • matcher中的正则会排除/login(登录页)和/api/auth(NextAuth内部认证接口,必须排除否则会影响登录请求)
  • 这样Middleware只会拦截需要保护的路由,未登录用户可以正常访问/login,不会触发循环

方法2:确保登录页无额外登录保护

检查你的/login页面代码,不要在页面内部添加未登录跳转逻辑(比如用useSession判断后强制跳转到其他页面),确保未登录用户能直接访问登录页。

额外检查

确认NextAuth配置中的pages.signIn路径和实际登录页路由完全一致,避免拼写错误导致的跳转异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:04:51