如何配置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
相关产品推荐
相关产品推荐

