将Prisma用户模型从User改为WebUser后NextAuth无法正常工作
Next-Auth自定义用户模型名称的支持与配置
Next-Auth的Prisma适配器完全支持自定义用户模型名称,你遇到的GetUserByEmailError错误是因为未正确配置适配器指向自定义的WebUser模型,而非不支持自定义名称。
解决步骤如下:
1. 调整Prisma Schema中的模型关联
确保所有关联模型(Session、Account、VerificationToken)都指向WebUser,而非默认的User。示例Schema:
model WebUser { id String @id @default(cuid()) name String? email String? @unique emailVerified DateTime? image String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt sessions Session[] accounts Account[] verificationTokens VerificationToken[] } model Session { id String @id @default(cuid()) sessionToken String @unique userId String expires DateTime user WebUser @relation(fields: [userId], references: [id], onDelete: Cascade) } model Account { id String @id @default(cuid()) userId String type String provider String providerAccountId String refresh_token String? @db.Text access_token String? @db.Text expires_at Int? token_type String? scope String? id_token String? @db.Text session_state String? user WebUser @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([provider, providerAccountId]) } model VerificationToken { identifier String token String @unique expires DateTime user WebUser? @relation(fields: [identifier], references: [email], onDelete: Cascade) @@unique([identifier, token]) }
2. 配置Next-Auth的Prisma适配器
在Next-Auth的配置文件中,通过modelMapping参数指定自定义模型名称,让适配器识别WebUser作为用户模型:
import NextAuth from "next-auth"; import { PrismaAdapter } from "@next-auth/prisma-adapter"; import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); export const authOptions = { adapter: PrismaAdapter(prisma, { modelMapping: { User: "WebUser", Session: "Session", Account: "Account", VerificationToken: "VerificationToken", }, }), // 你的认证提供者、回调函数等配置 }; const handler = NextAuth(authOptions); export { handler as GET, handler as POST };
3. 更新数据库结构
运行Prisma迁移命令,让Schema变更同步到Supabase数据库:
prisma migrate dev
错误原因说明
默认情况下,Prisma适配器会自动查找名为User的模型。当你将模型改为WebUser但未配置modelMapping时,适配器无法找到对应的用户模型表,因此在注册/登录时会抛出GetUserByEmailError这类找不到用户数据的错误。
内容的提问来源于stack exchange,提问作者rz123
相关产品推荐
相关产品推荐

