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

如何配置Better Auth的DrizzleAdapter生成Supabase兼容UUID

解决Better Auth生成非标准UUID导致Supabase创建用户失败的问题

问题核心

Better Auth默认生成的非标准UUID(如KZMw0N5rJhdi_i1JbWle6)不符合Supabase(PostgreSQL)要求的标准UUID格式(如50928f86-1dbc-4b4a-8377-c83c81051f7c),导致用户创建时报错invalid input syntax for type uuid。

可行解决方案

1. 直接在Better Auth配置中替换ID生成逻辑

Better Auth的顶层配置支持为用户和会话指定自定义ID生成函数,直接用Node.js内置的crypto.randomUUID()生成标准UUID即可:

import { createAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { randomUUID } from "crypto";

export const auth = createAuth({
  adapter: drizzleAdapter(db, { provider: "pg" }),
  // 覆盖用户ID生成逻辑
  user: {
    generateId: () => randomUUID(),
  },
  // 覆盖会话ID生成逻辑(可选,避免会话表也出现相同问题)
  session: {
    generateId: () => randomUUID(),
  },
});

2. 修正Drizzle Schema配置

移除手动设置的UUID默认值,因为Better Auth会主动传入生成的标准UUID,无需数据库层兜底:

import { pgTable, uuid } from "drizzle-orm/pg-core";

export const users = pgTable("users", {
  id: uuid("id").primaryKey(),
  // 其他用户字段(如email、name等)
});

错误原因说明

  • 之前尝试在DrizzleAdapter配置中添加generateId失败,是因为该适配器本身没有这个配置项,ID生成逻辑属于Better Auth的顶层配置范畴。
  • 数据库Schema设置默认UUID无效,是因为Better Auth会在写入数据库前主动传入它生成的ID,直接覆盖了数据库的默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:33:12