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

NextAuth类型错误:Session无accessToken属性,本地构建正常GitHub构建失败

解决GitHub CI构建时NextAuth Session类型错误问题

1. 扩展NextAuth的Session类型(核心修复)

NextAuth默认的Session类型不包含accessToken,必须手动扩展类型定义。在你的[...nextauth].ts文件顶部添加以下代码:

import NextAuth from "next-auth";
import { JWT } from "next-auth/jwt";

// 扩展NextAuth的Session、User和JWT类型
declare module "next-auth" {
  interface Session {
    accessToken?: string;
  }

  interface User {
    accessToken?: string;
  }
}

declare module "next-auth/jwt" {
  interface JWT {
    accessToken?: string;
  }
}

如果单独维护类型文件,确保tsconfig.json的include数组包含该文件路径,比如:

{
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "./types/auth.d.ts"]
}

2. 确保依赖版本与本地一致

本地构建正常但CI失败,大概率是依赖版本不一致:

  • 检查package.json中next-auth的版本号,尽量使用精确版本(去掉^或~前缀)
  • 确保yarn.lock已提交到GitHub仓库,CI执行yarn install时会严格按照lock文件安装依赖,避免版本漂移

3. 统一TypeScript配置

对比本地与CI环境的tsconfig.json,重点检查以下配置:

  • strict: 若CI开启了strict: true而本地未开启,会触发更严格的类型检查,暴露本地未发现的问题
  • noImplicitAny: 该选项开启时,未明确类型的变量会报错,确保本地和CI配置一致

4. 正确配置NextAuth回调(v4版本)

如果使用NextAuth v4,需要在callbacks中将accessToken从JWT传递到Session:

export default NextAuth({
  // 其他配置...
  callbacks: {
    async jwt({ token, user }) {
      // 用户登录时将accessToken存入JWT
      if (user) {
        token.accessToken = user.accessToken;
      }
      return token;
    },
    async session({ session, token }) {
      // 将JWT中的accessToken同步到Session
      session.accessToken = token.accessToken;
      return session;
    },
  },
});

5. 排查NextAuth版本差异

如果本地和CI的NextAuth版本不同(比如v3 vs v4),Session结构会有本质区别:

  • v3中accessToken可能直接在Session对象中,v4则必须通过回调手动传递
  • 查看yarn.lock中的next-auth版本,确保CI与本地完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:01:18