[GH-ISSUE #2786] Cli Generate Additional Fields Incorrectly Generates Default Value For Schema .default() Parameter #9348

Closed
opened 2026-04-13 04:46:55 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @pauldvu on GitHub (May 25, 2025).
Original GitHub issue: https://github.com/better-auth/better-auth/issues/2786

Is this suited for github?

  • Yes, this is suited for github

To Reproduce

  1. Create auth.ts
import { betterAuth } from "better-auth";
import { drizzleAdapter } from "better-auth/adapters/drizzle";
import { customSession, openAPI } from "better-auth/plugins";

export const auth = betterAuth({
	database: drizzleAdapter(db, {
		provider: "sqlite"
	}),
	user: {
		additionalFields: {
			role: {
				type: "string",
				required: false,
				defaultValue: "user",
				input: false // don't allow user to set role
			},
			sub: {
				type: "string",
				required: true,
				input: false // don't allow user to set role
			}
		}
	}
});
  1. Run Generate
bunx --bun @better-auth/cli generate --config ./src/auth.ts
  1. Observer Generated Code

Current vs. Expected behavior

Current

export const user = sqliteTable("user", {
	id: text("id").primaryKey(),
	name: text("name").notNull(),
	email: text("email").notNull().unique(),
	emailVerified: integer("email_verified", { mode: "boolean" })
		.$defaultFn(() => !1)
		.notNull(),
	image: text("image"),
	createdAt: integer("created_at", { mode: "timestamp" })
		.$defaultFn(() => new Date())
		.notNull(),
	updatedAt: integer("updated_at", { mode: "timestamp" })
		.$defaultFn(() => new Date())
		.notNull(),
	role: text("role").default(user), //user should be in quotation marks 
	sub: text("sub").notNull()
});

expected

export const user = sqliteTable("user", {
	id: text("id").primaryKey(),
	name: text("name").notNull(),
	email: text("email").notNull().unique(),
	emailVerified: integer("email_verified", { mode: "boolean" })
		.$defaultFn(() => !1)
		.notNull(),
	image: text("image"),
	createdAt: integer("created_at", { mode: "timestamp" })
		.$defaultFn(() => new Date())
		.notNull(),
	updatedAt: integer("updated_at", { mode: "timestamp" })
		.$defaultFn(() => new Date())
		.notNull(),
	role: text("role").default("user"), 
	sub: text("sub").notNull()
});

What version of Better Auth are you using?

1.2.8

Provide environment information

Mac Os Sequoia
Chrome

Which area(s) are affected? (Select all that apply)

Backend

Auth config (if applicable)

export const auth = betterAuth({
	database: drizzleAdapter(db, {
		provider: "sqlite"
	}),

	user: {
		additionalFields: {
			role: {
				type: "string",
				required: false,
				defaultValue: "user", 
				input: false // don't allow user to set role
			},
			sub: {
				type: "string",
				required: true,
				input: false // don't allow user to set role
			}
		}
	},
})

Additional context

export const auth = betterAuth({
database: drizzleAdapter(db, {
provider: "sqlite"
}),

user: {
	additionalFields: {
		role: {
			type: "string",
			required: false,
			defaultValue: "'user'", //workaround  is to add single quotes to the property value
			input: false // don't allow user to set role
		},
		sub: {
			type: "string",
			required: true,
			input: false // don't allow user to set role
		}
	}
}

})

Originally created by @pauldvu on GitHub (May 25, 2025). Original GitHub issue: https://github.com/better-auth/better-auth/issues/2786 ### Is this suited for github? - [x] Yes, this is suited for github ### To Reproduce 1. Create auth.ts ```ts import { betterAuth } from "better-auth"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { customSession, openAPI } from "better-auth/plugins"; export const auth = betterAuth({ database: drizzleAdapter(db, { provider: "sqlite" }), user: { additionalFields: { role: { type: "string", required: false, defaultValue: "user", input: false // don't allow user to set role }, sub: { type: "string", required: true, input: false // don't allow user to set role } } } }); ``` 2. Run Generate ```zsh bunx --bun @better-auth/cli generate --config ./src/auth.ts ``` 3. Observer Generated Code ### Current vs. Expected behavior Current ```ts export const user = sqliteTable("user", { id: text("id").primaryKey(), name: text("name").notNull(), email: text("email").notNull().unique(), emailVerified: integer("email_verified", { mode: "boolean" }) .$defaultFn(() => !1) .notNull(), image: text("image"), createdAt: integer("created_at", { mode: "timestamp" }) .$defaultFn(() => new Date()) .notNull(), updatedAt: integer("updated_at", { mode: "timestamp" }) .$defaultFn(() => new Date()) .notNull(), role: text("role").default(user), //user should be in quotation marks sub: text("sub").notNull() }); ``` expected ```ts export const user = sqliteTable("user", { id: text("id").primaryKey(), name: text("name").notNull(), email: text("email").notNull().unique(), emailVerified: integer("email_verified", { mode: "boolean" }) .$defaultFn(() => !1) .notNull(), image: text("image"), createdAt: integer("created_at", { mode: "timestamp" }) .$defaultFn(() => new Date()) .notNull(), updatedAt: integer("updated_at", { mode: "timestamp" }) .$defaultFn(() => new Date()) .notNull(), role: text("role").default("user"), sub: text("sub").notNull() }); ``` ### What version of Better Auth are you using? 1.2.8 ### Provide environment information ```bash Mac Os Sequoia Chrome ``` ### Which area(s) are affected? (Select all that apply) Backend ### Auth config (if applicable) ```typescript export const auth = betterAuth({ database: drizzleAdapter(db, { provider: "sqlite" }), user: { additionalFields: { role: { type: "string", required: false, defaultValue: "user", input: false // don't allow user to set role }, sub: { type: "string", required: true, input: false // don't allow user to set role } } }, }) ``` ### Additional context export const auth = betterAuth({ database: drizzleAdapter(db, { provider: "sqlite" }), user: { additionalFields: { role: { type: "string", required: false, defaultValue: "'user'", //workaround is to add single quotes to the property value input: false // don't allow user to set role }, sub: { type: "string", required: true, input: false // don't allow user to set role } } } })
GiteaMirror added the locked label 2026-04-13 04:46:55 -05:00
Author
Owner

@Kinfe123 commented on GitHub (May 28, 2025):

it is already fixed but not released yet!

<!-- gh-comment-id:2914598933 --> @Kinfe123 commented on GitHub (May 28, 2025): it is already fixed but not released yet!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#9348