Next Auth中间件重定向无限循环问题求助
Next Auth中间件无限循环到默认登录页的解决办法
问题根源
你直接导出了Next Auth的默认中间件,它会默认保护所有路由,包括你配置的自定义登录页/auth/signin。当未认证用户被重定向到该登录页时,中间件会再次判定用户未认证,触发重定向逻辑,最终导致无限循环,甚至 fallback 到Next Auth的默认登录页。
解决方案
1. 自定义中间件,排除登录相关路径
替换你当前的middleware.ts内容,使用withAuth并指定需要保护的路由,排除登录页和Next Auth的API路由:
import { withAuth } from "next-auth/middleware" export default withAuth({ pages: { signIn: "/auth/signin", }, }) // 配置需要保护的路由,排除/auth和/api/auth路径 export const config = { matcher: ["/((?!auth|api/auth).*)"], }
这段代码仅保护除/auth(自定义登录页所在路径)和/api/auth(Next Auth内置认证接口)之外的所有路由,避免登录页被中间件拦截。
2. 确保自定义登录页正常触发登录流程
你的/auth/signin页面需要正确调用Next Auth的登录方法,示例如下:
import { signIn } from "next-auth/react" export default function SignInPage() { return ( <div> <h1>登录</h1> <button onClick={() => signIn("discord")}>通过Discord登录</button> </div> ) }
确保登录页能正常触发第三方登录流程,而非被中间件保护导致无法访问。
额外检查项
- 确认
NEXTAUTH_SECRET环境变量已正确配置并加载,缺失或错误的密钥会导致认证逻辑异常。 - 检查
pages.signIn的路径与实际登录页的路由完全一致,避免拼写错误导致重定向目标错误。
内容的提问来源于stack exchange,提问作者Talha Bayansar
相关产品推荐
相关产品推荐

