From e130cda6c58c855f4d0bd5efa6b1df2780f2e024 Mon Sep 17 00:00:00 2001 From: ginnoir Date: Wed, 6 May 2026 22:23:34 -0500 Subject: [PATCH] =?UTF-8?q?Remove=20signIn=20callback=20=E2=80=94=20enroll?= =?UTF-8?q?ment=20now=20happens=20in=20getCurrentSession?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auth.js v5 calls signIn before the new user's row is fully committed, so inserting into household_members immediately caused a FK violation for any new user (e.g. cam on first sign-in). Enrollment is now handled lazily in getCurrentSession's auto-enroll fallback, which runs after the session is established and the user row is guaranteed to exist. Co-Authored-By: Claude Sonnet 4.6 --- src/lib/auth.ts | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/src/lib/auth.ts b/src/lib/auth.ts index c59ffe4..329fb54 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -3,15 +3,10 @@ import NextAuth, { type DefaultSession } from "next-auth"; import { db } from "@/lib/db"; import { accounts, - households, - householdMembers, sessions, users, verificationTokens, } from "@/modules/_core/schema"; -import { eq } from "drizzle-orm"; -import { ensureDefaultCalendarsForMembership } from "@/modules/calendar/server/defaults"; -import { ensureDefaultListsForHousehold } from "@/modules/lists/server/defaults"; declare module "next-auth" { interface Session { @@ -41,35 +36,6 @@ export const { handlers, auth, signIn, signOut } = NextAuth({ signIn: "/login", }, callbacks: { - async signIn({ user }) { - if (!user.id) return true; - const existing = await db - .select() - .from(householdMembers) - .where(eq(householdMembers.userId, user.id)) - .limit(1); - if (existing.length === 0) { - const [household] = await db.select().from(households).limit(1); - if (household) { - const [anyMember] = await db - .select() - .from(householdMembers) - .where(eq(householdMembers.householdId, household.id)) - .limit(1); - const role = anyMember ? "member" : "owner"; - await db - .insert(householdMembers) - .values({ householdId: household.id, userId: user.id, role }) - .onConflictDoNothing(); - await ensureDefaultCalendarsForMembership({ - householdId: household.id, - userId: user.id, - }); - await ensureDefaultListsForHousehold(household.id); - } - } - return true; - }, session({ session, user }) { session.user.id = user.id; return session;