Next.js 14中Auth.js Session接口无法覆盖的问题求助
解决Auth.js Session接口覆盖不生效的问题
核心问题分析
当前问题有两个关键原因:
- 类型声明已定义,但session回调未将自定义字段注入到实际返回的session对象中
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
相关产品推荐
相关产品推荐

