dieselD
Convex Community4mo ago
3 replies
diesel

Issues with better-auth component

Hi All, I am having some issues where I get these types of errors in a bunch of places on operations with the authClient with better-auth using the Component for Convex.

It happens on the listOrganizations and the createOrganization specifically, so mabye its some issue with how i set up the organizations plugin?

[Error: Uncaught TypeError: Cannot read properties of undefined (reading 'fields')
at isUniqueField (../../node_modules/@convex-dev/better-auth/src/client/adapterUtils.ts:67:9)
at <anonymous> (../../node_modules/@convex-dev/better-auth/src/client/adapterUtils.ts:487:19)
at find [as find] (<anonymous>)
at paginate (../../node_modules/@convex-dev/better-auth/src/client/adapterUtils.ts:487:19)
at handler (../../node_modules/@convex-dev/better-auth/src/client/index.ts:198:5)

// Create Better Auth instance with organization plugin for multi-tenancy
export const createAuth = (
  ctx: GenericCtx<DataModel>,
  { optionsOnly } = { optionsOnly: false },
) => {
  return betterAuth({
    // Disable logging when createAuth is called just to generate options
    logger: {
      disabled: optionsOnly,
    },
    baseURL: siteUrl,
    database: authComponent.adapter(ctx),

    // Email/password authentication (non-verified for now)
    emailAndPassword: {
      enabled: true,
      requireEmailVerification: false,
      // Optional: add password requirements
      minPasswordLength: 8,
    },

    // User table configuration
    user: {
      // Additional user fields beyond Better Auth defaults
      additionalFields: {
        // Platform-level role - stored in userProfiles instead
        // Don't add custom fields here as they cause validation errors
        // Use triggers to sync to userProfiles table
      },
    },

    plugins: [
      // The Convex plugin is required for Convex compatibility
      convex(),

      // Organization plugin for multi-company support with custom RBAC
      organization({
        // Access Control configuration
        ac,

        // Custom roles with fine-grained permissions
        roles: {
          owner: ownerRole,
          admin: adminRole,
          contest_admin: contestAdminRole,
        },

        // Set creator as owner by default
        creatorRole: "owner",

        // We don't need teams - companies are top-level organizations
        teams: {
          enabled: false,
        },
      }),
    ],
  });
};
Was this page helpful?