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

求助解决NextAuth中"Cannot read properties of undefined (reading 'jwt')"错误

NextAuth认证流程JWT错误问题解决

问题概述

使用NextAuth完成认证配置后,登录测试时触发错误:[next-auth][error][JWT_SESSION_ERROR] Cannot read properties of undefined (reading 'jwt')

复现步骤

  • 按示例配置并创建[...nextauth].js文件
  • 更新Providers并填入对应平台的凭证信息
  • 发起登录请求后触发错误

相关代码

frontend/pages/api/auth/[...nextauth].js:

import NextAuth from "next-auth";
import GoogleProvider from 'next-auth/providers/google';
import FacebookProvider from 'next-auth/providers/facebook';
import EmailProvider from 'next-auth/providers/email';

const options = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
    FacebookProvider({
      clientId: process.env.FACEBOOK_CLIENT_ID,
      clientSecret: process.env.FACEBOOK_CLIENT_SECRET,
    }),
  ],
  pages: {
    signIn: '/signin',
    signOut: '/',
    error: '/auth/error', // 错误码通过查询参数?error=传递
    verifyRequest: '/auth/verify-request', // 用于邮件验证提示页面
    newUser: '/firstpage', // 新用户首次登录跳转页面(无需可删除该配置)
  },
  secret: process.env.NEXTAUTH_SECRET,
  database: process.env.NEXT_PUBLIC_DATABASE_URL,
  session: {
    jwt: true,
  },
  callbacks: {
    session: async (session, user) => {
      session.jwt = user.jwt;
      session.id = user.id;
      return Promise.resolve(session);
    },
    jwt: async (token, user, account) => {
      const isSignIn = user ? true : false;
      if (isSignIn) {
        const response = await fetch(
          `${process.env.NEXT_PUBLIC_STRAPI_API_URL}/auth/${account.provider}/callback?access_token=${account?.accessToken}`
        );
        const data = await response.json();
        console.log("DATTA",data);
        token.jwt = data.jwt;
        token.id = data.user.id;
      }
      return Promise.resolve(token);
    },
  },
};

const Auth = (req, res) =>
  NextAuth(req, res, options);

export default Auth;

错误详情

[next-auth][error][JWT_SESSION_ERROR] 
Cannot read properties of undefined (reading 'jwt') {
  message: "Cannot read properties of undefined (reading 'jwt')",
  stack: "TypeError: Cannot read properties of undefined (reading 'jwt')\n" +
    '    at Object.session (webpack-internal:///(api)/./pages/api/auth/[...nextauth].js:45:32)\n' +
    '    at Object.session (/Users/PATH-TO-FILES...)\n'

  name: 'TypeError'
}

解决方案

错误核心原因是session回调的参数顺序错误:在NextAuth的JWT模式下,session回调的第二个参数是token而非user,你当前代码中读取user.jwt时,user实际为undefined,导致报错。

修改session回调代码如下:

callbacks: {
  session: async (session, token) => { // 将第二个参数从user改为token
    session.jwt = token.jwt;
    session.id = token.id;
    return Promise.resolve(session);
  },
  // 其余回调逻辑保持不变
}

额外注意事项:

  1. 确认环境变量NEXTAUTH_SECRET、各Provider凭证、Strapi API地址均配置正确
  2. 检查Strapi接口返回的data结构,确保包含jwt和user.id字段,避免后续出现类似未定义问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:12:26