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

Auth.js v5调用auth()时出现读取'name'未定义错误求助

问题

使用Auth.js v5 5.0.0-beta.21版本实现GitLab登录,登录流程正常,但在服务器组件中调用const session = await auth()时返回null,并抛出错误:

[auth][error] JWTSessionError: Read more at https://errors.authjs.dev#jwtsessionerror
[auth][cause]: TypeError: Cannot read properties of undefined (reading 'name')
at Module.session (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/actions/session.js:37:41)
at async AuthInternal (webpack-internal:///(rsc)/./node_modules/@auth/core/lib/index.js:47:24)
at async Auth (webpack-internal:///(rsc)/./node_modules/@auth/core/index.js:127:34)
at async OverviewPage (webpack-internal:///(rsc)/./src/app/intake/overview/page.tsx:15:25)
[auth][details]: {}

当前auth.ts配置代码:

export const { handlers, signIn, signOut, auth } = NextAuth({
    providers: [
        GitLab({
            authorization: `${GITLAB_URL}/oauth/authorize?scope=read_user`,
            token: `${GITLAB_URL}/oauth/token`,
            userinfo: `${GITLAB_URL}/api/v4/user`,
        })
    ],
    callbacks: {
        jwt({ token, user, account, trigger }) {
            if (user) {
                token.id = user.id
            }
            if (account?.provider === "GitLab") {
                return { ...token, accessToken: account?.access_token }
            }
        },
        session({ session, token }) {
            session.user.id = token.id
            session.accessToken = token.accessToken
            return session
        },
    },
    session: {
        strategy: "jwt",
    },
})

仅需获取令牌调用后端接口,不关注用户信息,请问配置哪里出错了?


解决方案

问题出在jwt回调函数的返回逻辑:

  • 当account?.provider !== "GitLab"或该条件不触发时,jwt回调没有返回任何值,导致token变为undefined,后续session解析时尝试读取token.name就会抛出"Cannot read properties of undefined (reading 'name')"错误。

修改步骤:

  1. 确保jwt回调在所有分支都返回token对象,哪怕条件不满足也要返回原始token:
jwt({ token, user, account, trigger }) {
    if (user) {
        token.id = user.id
    }
    if (account?.provider === "GitLab") {
        token.accessToken = account.access_token
    }
    // 必须始终返回token,不能仅在特定条件下返回
    return token
},
  1. session回调中session.accessToken的赋值可保留,token上的accessToken字段会被正确传递。

修改后的完整auth.ts配置:

export const { handlers, signIn, signOut, auth } = NextAuth({
    providers: [
        GitLab({
            authorization: `${GITLAB_URL}/oauth/authorize?scope=read_user`,
            token: `${GITLAB_URL}/oauth/token`,
            userinfo: `${GITLAB_URL}/api/v4/user`,
        })
    ],
    callbacks: {
        jwt({ token, user, account, trigger }) {
            if (user) {
                token.id = user.id
            }
            if (account?.provider === "GitLab") {
                token.accessToken = account.access_token
            }
            return token
        },
        session({ session, token }) {
            session.user.id = token.id
            session.accessToken = token.accessToken
            return session
        },
    },
    session: {
        strategy: "jwt",
    },
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:07:19