如何扩展NextAuth 5.0.0-beta.20版本的User类型
解决NextAuth 5.0.0-beta.20中扩展User类型包含role字段的问题
要让TypeScript识别user对象中的role属性,你需要通过类型扩展覆盖NextAuth的默认类型定义,具体步骤如下:
1. 创建类型声明文件
在项目根目录或types文件夹下新建next-auth.d.ts文件,内容如下:
import NextAuth from "next-auth"; declare module "next-auth" { // 扩展User类型,添加role字段 interface User { role: string; // 可根据实际需求定义更具体的类型,比如 'admin' | 'user' | 'moderator' } // 同步扩展Session中的User类型,确保session.user包含role字段 interface Session { user: User; } }
2. 优化session回调的类型(可选但推荐)
去掉回调里的any类型,用扩展后的类型替代,避免类型模糊:
callbacks: { async session({ session, user }) { if (session && user) { session.user.id = user.id; session.user.role = user.role; } return session; }, },
3. 确认TypeScript配置生效
检查tsconfig.json的include数组,确保包含你的类型声明文件路径,示例:
{ "include": [ "next-env.d.ts", "**/*.ts", "**/*.tsx", "types/**/*.d.ts" // 若声明文件在types目录下需添加此项 ] }
完成以上操作后重启开发服务器,useSession()返回的user对象就能正确识别role属性了。
内容的提问来源于stack exchange,提问作者Chris Hunter-Johnson
相关产品推荐
相关产品推荐

