diff --git a/packages/better-auth/src/context/create-context.test.ts b/packages/better-auth/src/context/create-context.test.ts index 572a4e5a6f..a926f1894f 100644 --- a/packages/better-auth/src/context/create-context.test.ts +++ b/packages/better-auth/src/context/create-context.test.ts @@ -566,6 +566,45 @@ describe("base context creation", () => { expect(id.length).toBeGreaterThan(0); } }); + + it("should return uuid when generateId is 'uuid'", async () => { + const res = await initBase({ + advanced: { + database: { + generateId: "uuid", + }, + }, + }); + const id = res.generateId({ model: "user" }); + expect(typeof id).toBe("string"); + expect(id).toMatch( + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, + ); + }); + + it("should return false when generateId is 'serial'", async () => { + const res = await initBase({ + advanced: { + database: { + generateId: "serial", + }, + }, + }); + const id = res.generateId({ model: "user" }); + expect(id).toBe(false); + }); + + it("should return false when generateId is false", async () => { + const res = await initBase({ + advanced: { + database: { + generateId: false, + }, + }, + }); + const id = res.generateId({ model: "user" }); + expect(id).toBe(false); + }); }); describe("password configuration", () => { diff --git a/packages/better-auth/src/context/create-context.ts b/packages/better-auth/src/context/create-context.ts index 7d2dc9ab8f..9f7dcf7990 100644 --- a/packages/better-auth/src/context/create-context.ts +++ b/packages/better-auth/src/context/create-context.ts @@ -159,8 +159,15 @@ export async function createAuthContext( if (typeof (options.advanced as any)?.generateId === "function") { return (options.advanced as any).generateId({ model, size }); } - if (typeof options?.advanced?.database?.generateId === "function") { - return options.advanced.database.generateId({ model, size }); + const dbGenerateId = options?.advanced?.database?.generateId; + if (typeof dbGenerateId === "function") { + return dbGenerateId({ model, size }); + } + if (dbGenerateId === "uuid") { + return crypto.randomUUID(); + } + if (dbGenerateId === "serial" || dbGenerateId === false) { + return false; } return generateId(size); }; diff --git a/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts b/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts index f8d18de032..9e4f90969a 100644 --- a/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts +++ b/packages/better-auth/src/plugins/api-key/routes/create-api-key.ts @@ -444,10 +444,10 @@ export function createApiKey({ }); await setApiKey(ctx, apiKey, opts); } else if (opts.storage === "secondary-storage") { - const id = - ctx.context.generateId({ - model: API_KEY_TABLE_NAME, - }) ?? generateId(); + const generatedId = ctx.context.generateId({ + model: API_KEY_TABLE_NAME, + }); + const id = generatedId || generateId(); apiKey = { ...data, id,