Extending User Model (better auth, prismadb, trpc)

Hello!

I'm trying to extend my better-auth user model with isBanned, banMessage and language as fields, but somehow i can't accesss it from my trpc middleware. Somehow though, im unable to access my new properties form there.

My Prisma user Schema:
model User {
  id                      String                   @id
  name                    String
  email                   String
  emailVerified           Boolean                  @default(false)
  image                   String?
  createdAt               DateTime                 @default(now())
  updatedAt               DateTime                 @default(now()) @updatedAt
  isBanned                Boolean                  @default(false)
  banMessage              String
  language                String                   @db.VarChar(2) @default("en")
  sessions                Session[]
  accounts                Account[]
  organizationMemberships OrganizationMembership[]

  @@unique([email])
  @@map("user")
}


my /lib/auth.ts
import { PrismaClient } from "@/generated/prisma/client";
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
// https://www.better-auth.com/docs/basic-usage#session

const prisma = new PrismaClient();

export const auth = betterAuth({
    
    // Database
    database: prismaAdapter(prisma, {
        provider: "postgresql"
    }),

    // Sign-in Methods
    emailAndPassword: {
        enabled: true,
        autoSignIn: true
    },

    user: {
        additionalFields: {
            isBanned: {
                type: "boolean",
                required: true,
                defaultValue: false
            },
            banMessage: {
                type: "string",
                required: false
            },
            language: {
                type: "string",
                defaultValue: "en",
                required: true,
                input: true
            }
        }
    },
    plugins: [
    ]
});


TRPC Middleware:
// other middleware...
export const authedProcedure = publicProcedure.use(async ({ ctx, next }) => {
    const session = await auth.api.getSession({
        headers: await headers(),
    });

    if(!session) {
        throw new TRPCError({ code: "UNAUTHORIZED", message: "Unauthorized" });
    }

    // Problem is here! vvvv
    if(session.user.isBanned) {
      // throw error
    }

    return next({ ctx: { ...ctx, auth: session }});
});
Was this page helpful?