我正在使用 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