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

Next.js 14中Auth.js Session接口无法覆盖的问题求助

解决Auth.js Session接口覆盖不生效的问题

核心问题分析

当前问题有两个关键原因:

  1. 类型声明已定义,但session回调未将自定义字段注入到实际返回的session对象中
  2. authorize返回的用户信息未同步到token,导致session回调无法获取自定义字段数据

分步解决

1. 完善auth.ts中的回调逻辑

需要添加jwt回调保存用户自定义字段,再在session回调中将字段赋值给session对象:

import NextAuth, {NextAuthConfig, Session, User} from "next-auth";
import Credentials from "next-auth/providers/credentials";

export const authConfig = {
    providers: [
        Credentials({
            authorize: async (c) => {
                // 保留你的用户获取逻辑
                const user = fetch my user (This work)
                if (!user) {
                    return null;
                }
                return {
                    address: "test",
                    // 可添加其他自定义字段如id、name等
                };
            },
        }),
    ],
    callbacks: {
        // 新增jwt回调,将用户自定义字段存入token
        async jwt({ token, user }) {
            if (user) {
                token.address = user.address;
            }
            return token;
        },
        // 修改session回调,将token中的字段注入session
        async session({ session, token}: {session: Session, token?: any}) {
            if (session.user && token.address) {
                session.user.address = token.address;
            }
            return session;
        }
    },
} satisfies NextAuthConfig;

export const { handlers, auth, signIn } = NextAuth(authConfig);

2. 确保类型声明文件被正确识别

检查tsconfig.json的include配置,确保包含类型声明文件所在目录:

{
  "compilerOptions": {
    // 其他编译配置...
  },
  "include": ["src/**/*", "src/types/**/*"]
}

若使用App Router,也可将next-auth.d.ts放在app/types目录下,Next.js会自动扫描识别。修改类型声明后,建议重启TypeScript服务(VSCode中按Ctrl+Shift+P选择"Restart TS Server")。

3. 验证middleware中的session

重启项目并登录后,middleware中打印的session即可包含address字段:

const session = await auth()
console.log(session?.user?.address) // 输出"test"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:47:14