I am using next-auth with a custom provider and the Prisma adapter and I only want to store the values: id, name, country, avatar, and gender. However, I am getting this error:
[next-auth][error][adapter_error_createUser]
https://next-auth.js.org/errors#adapter_error_createuser
Invalid `p.user.create()` invocation in
.\node_modules\@next-auth\prisma-adapter\dist\index.js:6:38
3 exports.PrismaAdapter = void 0;
4 function PrismaAdapter(p) {
5 return {
→ 6 createUser: (data) => p.user.create({
data: {
name: [redacted],
wcaId: [redacted],
country: [redacted],
avatar: [redacted],
gender: [redacted],
email: undefined,
emailVerified: null
~~~~~~~~~~~~~
}
})
Unknown arg `emailVerified` in data.emailVerified for type UserCreateInput. Available args:
...
The profile object in my custom provider looks like this:
profile(profile) {
return {
id: profile.me.id,
name: profile.me.name,
country: profile.me.country_iso2,
avatar: profile.me.avatar.url,
gender: profile.me.gender,
};
},
Everything in my Prisma schema follows the example in https://next-auth.js.org/adapters/prisma#setup except the User model which is like so:
model User {
id String @id @default(cuid())
name String
country String @db.Char(2)
avatar String
gender String @db.Char(1)
accounts Account[]
sessions Session[]
// Temporary workaround:
email String? @unique
emailVerified DateTime? @map("email_verified")
}
In the error, the adapter appears to have added email and emailVerified to the data object so the temporary workaround I am using is adding email and emailVerified columns to my Prisma model as shown above. However, this is not ideal, and I would like to know how I can remove these unnecessary columns from my database as their values are always undefined and null.
The authjs doc for the Prisma adapter offers the User's table's sample code, which has an 'emailVerified' field. When I tried to exclude this field from the User table, I encountered a similar error, which says that I should have the 'emailVerified' field. To fix this error, I added the createUser() method to the prismaAdapter, the code is like this:
const prismaAdapter = PrismaAdapter(prisma);
//@ts-ignore
prismaAdapter.createUser = (data: User) => {
return prisma.user.create({
data: {
name: data.name as string,
email: data.email as string,
},
})
}
I got this solution from this post, and it worked fine.