1

我正在使用 next-auth 和 nextjs。我从文档中复制了它并对其进行了少量更改,但它不起作用。

// models/index.ts 

import User, { UserSchema } from "./User";

export default {
  User: {
    model: User,
    schema: UserSchema,
  },
};

// models/User.ts

import Adapters, { TypeORMUserModel } from "next-auth/adapters";

// Extend the built-in models using class inheritance
export default class User extends (Adapters.TypeORM.Models.User
  .model as typeof TypeORMUserModel) {
  constructor(name, email, image, emailVerified, points) {
    super(name, email, image, emailVerified);
    if (points) {
      this.points = points;
    }
  }
}

export const UserSchema = {
  name: "User",
  target: User,
  columns: {
    ...Adapters.TypeORM.Models.User.schema.columns,
    points: {
      type: "string",
      nullable: true,
    },
  },
};

/pages/api/auth/[...nextauth].tsx
import NextAuth from "next-auth";
import Providers from "next-auth/providers";
import Adapters from "next-auth/adapters";

import Models from "../../../models";
const path = require("path");
const envPath = path.resolve(process.cwd(), ".env");

require("dotenv").config({ path: envPath });

export default NextAuth({
  providers: [
    Providers.Twitch({
      clientId: process.env.CLIENT_ID,
      clientSecret: process.env.CLIENT_SECRET,
      scope: "user:read:email user:read:subscriptions",
    }),
  ],

  adapter: Adapters.TypeORM.Adapter(process.env.DATABASE_URL, {
    models: {
      User: Models.User,
    },
  }),

  session: {
    jwt: true,
  },

  callbacks: {
    async jwt(token, user, account, profile, isNewUser) {
      if (account?.accessToken || account?.id) {
        token.accessToken = account.accessToken;
        token.id = account.id;
      }
      console.log(user);
      if (user?.points) {
        token.points = user.points;
      }
      return token;
    },
    async session(session, token) {
      session.user.twitchAccessToken = token.accessToken;
      session.user.twitchId = token.id;
      session.user.points = token.points;
      return session;
    },
  },
});

它应该工作。但是当我调用 useSession 时它不会显示积分。我的数据库是 MongoDB,连接字符串。官方文档:https ://next-auth.js.org/tutorials/typeorm-custom-models

4

0 回答 0