fix: handle serial and false cases in generateId (#7474)

This commit is contained in:
Taesu
2026-01-20 09:22:20 +09:00
committed by GitHub
parent 46b8c89788
commit 52033beabc
3 changed files with 52 additions and 6 deletions

View File

@@ -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", () => {

View File

@@ -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);
};

View File

@@ -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,