Files
euchre_camp/src/lib/auth.ts
T

64 lines
2.0 KiB
TypeScript

import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { prisma } from "./prisma";
import { testUtils } from "better-auth/plugins";
// Detect database provider from environment
const databaseProvider = process.env.DATABASE_PROVIDER || "sqlite";
export const auth = betterAuth({
database: prismaAdapter(prisma, {
provider: databaseProvider as "sqlite" | "postgresql",
}),
emailAndPassword: {
enabled: true,
autoSignIn: true, // Automatically sign in after registration
requireEmailVerification: false, // Don't require email verification for tests
},
secret: process.env.BETTER_AUTH_SECRET,
baseURL: process.env.BETTER_AUTH_URL || "http://localhost:3000",
trustedOrigins: [
process.env.BETTER_AUTH_URL || "http://localhost:3000",
"http://127.0.0.1:3000",
"http://0.0.0.0:3000",
// Parse comma-separated TRUSTED_ORIGINS environment variable
...(process.env.TRUSTED_ORIGINS ? process.env.TRUSTED_ORIGINS.split(',').map(origin => origin.trim()) : []),
],
session: {
cookieCache: {
enabled: false, // Disable cookie cache to avoid session cache issues
},
},
databaseHooks: {
user: {
create: {
async after(user) {
// Generate a unique player name using timestamp and random string
const timestamp = Date.now();
const randomId = Math.random().toString(36).substring(2, 8);
const baseName = user.name || user.email.split('@')[0];
const uniqueName = `${baseName}-${timestamp}-${randomId}`;
// Create a Player record for the new user
const newPlayer = await prisma.player.create({
data: {
name: uniqueName,
normalizedName: uniqueName.toLowerCase(),
},
});
// Update the User with the playerId
await prisma.user.update({
where: { id: user.id },
data: { playerId: newPlayer.id },
});
},
},
},
},
plugins: [
testUtils()
]
});