0

当用户通过下一个身份验证登录时,我需要将自定义字段添加到默认用户模型。我尝试了官方文档https://next-auth.js.org/tutorials/typeorm-custom-models中的方法。

以下是我的代码:

模型/User.js

import Adapters from "next-auth/adapters";

export default class User extends Adapters.TypeORM.Models.User.model {
    constructor(name, email, image, emailVerified) {
    super(name, email, image, emailVerified);
         }
}

export const UserSchema = {
  name: "User",
  target: User,
  columns: {
    ...Adapters.TypeORM.Models.User.schema.columns,
    // Adds a phoneNumber to the User schema
    phoneNumber: {
      type: "varchar",
      nullable: false,
      default: "test",
    },
  },
};

模型/index.js

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

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

pages/api/auth/[...nextauth].js

import NextAuth from "next-auth";
import Providers from "next-auth/providers";
import Adapters from "next-auth/adapters";
import Models from "../../../models";

const { MONGODB_URI } = process.env;

export default NextAuth({
  
  providers: [
    Providers.Google({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
        }),
     ],
  adapter: Adapters.TypeORM.Adapter(
       MONGODB_URI,
       {
      models: {
        User: Models.User,
      },
    }
  ),

  });

这应该在用户模型中添加了一个额外的电话号码字段,但是当我检查 db 时,它只包含默认字段。我在这里做错了什么?有没有更好的方法来达到同样的结果??

4

1 回答 1

0

您必须为您的字段设置默认值。

export default class User extends Adapters.TypeORM.Models.User.model {
    customField;
    constructor(name, email, image, emailVerified, customField) {
       super(name, email, image, emailVerified);
       if (customField) this.customField = customField;
    }
}
于 2021-04-19T08:33:07.310 回答