65 lines
1.3 KiB
TypeScript
65 lines
1.3 KiB
TypeScript
import { betterAuth } from "better-auth";
|
|
import { prismaAdapter } from "better-auth/adapters/prisma";
|
|
import { PrismaClient } from "../../generated/prisma";
|
|
import { VITE_PUBLIC_URL } from "./env";
|
|
|
|
const baseUrl = VITE_PUBLIC_URL;
|
|
const prisma = new PrismaClient();
|
|
|
|
// logger.info('Initializing Better Auth with Prisma adapter');
|
|
export const auth = betterAuth({
|
|
baseURL: baseUrl,
|
|
basePath: "/api/auth",
|
|
database: prismaAdapter(prisma, {
|
|
provider: "postgresql",
|
|
}),
|
|
emailAndPassword: {
|
|
enabled: true,
|
|
},
|
|
socialProviders: {
|
|
github: {
|
|
clientId: process.env.GITHUB_CLIENT_ID || "CLIENT_ID_MISSING",
|
|
clientSecret: process.env.GITHUB_CLIENT_SECRET || "CLIENT_SECRET_MISSING",
|
|
enabled: true,
|
|
},
|
|
},
|
|
user: {
|
|
additionalFields: {
|
|
role: {
|
|
type: "string",
|
|
required: false,
|
|
defaultValue: "user",
|
|
},
|
|
},
|
|
},
|
|
databaseHooks: {
|
|
user: {
|
|
create: {
|
|
before: async (user) => {
|
|
if (user.email === process.env.ADMIN_EMAIL) {
|
|
return {
|
|
data: {
|
|
...user,
|
|
role: "admin",
|
|
},
|
|
};
|
|
}
|
|
return { data: user };
|
|
},
|
|
},
|
|
},
|
|
},
|
|
secret: process.env.BETTER_AUTH_SECRET,
|
|
session: {
|
|
cookieCache: {
|
|
enabled: true,
|
|
maxAge: 60 * 60 * 24 * 7, // 7 days
|
|
},
|
|
expiresIn: 60 * 60 * 24 * 7, // 7 days
|
|
},
|
|
advanced: {
|
|
cookiePrefix: "bun-react",
|
|
trustProxy: true,
|
|
},
|
|
});
|