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:
my /lib/auth.ts
TRPC Middleware:
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")
}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: [
]
});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 }});
});// 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 }});
});