我已经在Next.js项目中实现了Next-auth,并且我有这个JWT和会话:

export const { signIn, signOut, auth } = NextAuth({
  ...authConfig,
  providers: [
    CredentialsProvider({
      async authorize(credentials) {
        try {
          const user = await login(credentials);
          return user;
        } catch (error) {
          return null;
        }
      },
    }),
  ],
  callbacks: {
    async jwt({ token, user }: { token: any; user: any }) {
      if (user) {
        token.id = (user as CustomUser).id;
        token.username = (user as CustomUser).username;
        token.img = (user as CustomUser).img;
        token.isAdmin = (user as CustomUser).isAdmin;
      }
      return token;
    },
    async session({ session, token }: { session: any; token: any }) {
      if (token) {
        session.user = {
          name: token.username,
          image: token.img,
          id: token.id,
          isAdmin: token.isAdmin,
        };
      }
      return session;
    },
  },
});

我也在session中添加了isAdmin,以便我可以在代码中使用它.

const session = await auth();
console.log(session?.user?.isAdmin)

我收到了这个错误消息:

Property 'isAdmin' does not exist on type '{ name?: string | null | undefined; email?: string | null | undefined; image?: string | null | undefined; }'.ts(2339)

谁能告诉我如何在会话中添加更多数据?

这是我的用户:

 {
  _id: new ObjectId('random'),
  username: 'admin',
  email: 'admin@gmail.com',
  password: '',
  isAdmin: true,
  isActive: true,
  phone: '',
  address: 'no ',
}

推荐答案

您需要创建一个types/next-auth.d.ts文件,并将您想要的其他字段添加到会话中,如doc所示:

import NextAuth, { DefaultSession } from "next-auth"

declare module "next-auth" {
  interface Session {
    user: {
      isAdmine?: boolean
    } & DefaultSession["user"]
  }
}

Typescript相关问答推荐

创建一个通用上下文,允许正确推断其中的子项

无法从应用程序内的库导入组件NX Expo React Native

如何在方法中定义TypeScript返回类型,以根据参数化类型推断变量的存在?

如果在TypeScript中一个原始的类方法是递归的,如何使用类decorator 模式?

如何修复正在处理类型但与函数一起使用时不处理的类型脚本类型

Angular 行为:属性类型从SignalFunction更改为布尔

如何提取密钥及其对应的属性类型,以供在新类型中使用?

Next.js错误:不变:页面未生成

错误TS2403:后续变量声明必须具有相同的类型.变量';CRYPTO';的类型必须是';CRYPATO';,但这里的类型是';CRYPATO';

为什么我的动画状态在组件实例之间共享?

如何将spread operator与typescripts实用程序类型`参数`一起使用

如果判断空值,则基本类型Gaurd不起作用

如何将通用接口的键正确设置为接口的键

如何创建内部和外部组件都作为props 传入的包装器组件?

可赋值给类型的类型,从不赋值

打字脚本错误:`不扩展[Type]`,而不是直接使用`[Type]`

类型判断数组或对象的isEmpty

递归类型别名的Typescript 使用

完全在类型系统中构建的东西意味着什么?

在tabel管理区域react js上设置特定顺序