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

Next.js(v13.3.4)+NextAuth(v4)首次登录跳转引导页报错求助

解决NextAuth首次登录重定向引导页的NEXT_REDIRECT错误

错误原因

你在jwt回调中调用redirect()方法是错误的——jwt回调的核心作用是处理JWT Token的生成与更新,它的返回值必须是Token对象,不允许在其中执行重定向操作。redirect()方法仅适用于Next.js App Router的组件或路由处理函数,在NextAuth的回调中调用会触发NEXT_REDIRECT错误。

正确解决方案

我们需要借助NextAuth的redirect回调来处理首次登录的重定向逻辑,同时在jwt回调中标记新用户(可选,用于后续页面判断),并调整中间件规则避免拦截引导页。

1. 修改/auth/[...next]/route.js

import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();
export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
  pages: {
    signIn: "/auth/signin",
  },
  adapter: PrismaAdapter(prisma),
  session: {
    strategy: "jwt",
  },
  callbacks: {
    async signIn({ user, account, profile, email, credentials }) {
      return true; // 确保返回布尔值,原代码返回user可能导致流程异常
    },
    async redirect({ url, baseUrl, isNewUser }) {
      // 新用户登录后直接重定向到引导页
      if (isNewUser) {
        return `${baseUrl}/onboarding`;
      }
      // 非新用户优先跳转到登录前的目标页面,否则返回首页
      return url.startsWith(baseUrl) ? url : baseUrl;
    },
    async jwt({ token, user, account, profile, isNewUser }) {
      // 将新用户标记存入Token,方便后续页面判断用户状态
      if (isNewUser) {
        token.isNewUser = isNewUser;
      }
      return token;
    },
  },
};

const handler = NextAuth(authOptions);
export { handler as GET, handler as POST };

2. 调整middleware.js

确保引导页/onboarding不被NextAuth中间件拦截(用户首次登录后已完成认证,无需重复拦截):

export { default } from "next-auth/middleware";
export const config = {
  matcher: [
    // 拦截除auth、onboarding、静态资源之外的所有路径
    "/((?!api|auth|onboarding|_next/static|_next/image|favicon.ico).*)"
  ],
};

关键说明

  • redirect回调是NextAuth专门用于控制登录后跳转的钩子,能直接获取isNewUser参数,无需额外查询数据库。
  • 若后续需要在页面中判断用户是否为新用户,可以通过useSession钩子从Token中读取isNewUser标记。

内容的提问来源于stack exchange,提问作者S. Sango

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 20:23:12