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

使用Next Auth.js Google适配器时遭遇Prisma Client验证错误

解决Next Auth.js Google适配器触发的PrismaClientValidationError问题

问题原因

这个错误的核心是Next Auth的Prisma适配器期望你的Account模型包含provider与providerAccountId的复合唯一约束,但当前你的Prisma Schema未满足这个要求,导致适配器调用account.findUnique()时使用的provider_providerAccountId参数不被Prisma客户端识别。

解决方案

1. 修正Prisma Schema的Account模型

确保你的Account模型包含必填字段及复合唯一约束,示例如下:

model Account {
  id                String  @id @default(cuid())
  userId            String
  type              String
  provider          String  // 第三方登录服务商标识(如google)
  providerAccountId String  // 服务商返回的用户唯一ID
  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 User @relation(fields: [userId], references: [id], onDelete: Cascade)

  // 关键:添加复合唯一约束,这是适配器识别查询参数的核心
  @@unique([provider, providerAccountId])
}

2. 同步数据库并更新Prisma客户端

执行以下命令应用Schema变更并生成新的Prisma客户端:

npx prisma migrate dev
npx prisma generate
  • migrate dev会将Schema的变更同步到PostgreSQL数据库
  • generate会重新生成适配新Schema的Prisma客户端代码

3. 检查Next Auth配置的适配器设置

确保你正确使用了官方的Prisma适配器,没有自定义逻辑覆盖默认查询行为:

import { PrismaAdapter } from "@next-auth/prisma-adapter";
import prisma from "@/lib/prisma"; // 你的Prisma实例
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";

export const authOptions = {
  adapter: PrismaAdapter(prisma),
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
    }),
  ],
};

export default NextAuth(authOptions);

4. 清理缓存与旧客户端文件

如果上述步骤无效,尝试:

  • 删除项目根目录下的.prisma/client文件夹
  • 重启Next.js开发服务器
  • 重新执行npx prisma generate

内容的提问来源于stack exchange,提问作者rapreala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:59:54