You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:07:17