求助解决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); }, // 其余回调逻辑保持不变 }
额外注意事项:
- 确认环境变量
NEXTAUTH_SECRET、各Provider凭证、Strapi API地址均配置正确 - 检查Strapi接口返回的
data结构,确保包含jwt和user.id字段,避免后续出现类似未定义问题
内容的提问来源于stack exchange,提问作者Xhris
相关产品推荐
相关产品推荐

