From 4fc952cdddcade05b30ed154f454c7b95707962a Mon Sep 17 00:00:00 2001 From: Nicholai Date: Mon, 16 Feb 2026 19:46:48 -0700 Subject: [PATCH] fix(auth): pass userId through signup verification flow Signup redirect now includes userId in the query string so the verify-email endpoint receives it. After successful verification, the endpoint creates a local DB user via ensureUserExists() so the account is ready for login. --- src/app/api/auth/verify-email/route.ts | 10 ++++++++++ src/components/auth/signup-form.tsx | 5 ++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/app/api/auth/verify-email/route.ts b/src/app/api/auth/verify-email/route.ts index bbcbce4..1006b9e 100755 --- a/src/app/api/auth/verify-email/route.ts +++ b/src/app/api/auth/verify-email/route.ts @@ -1,6 +1,7 @@ import { NextRequest, NextResponse } from "next/server" import { getWorkOS } from "@workos-inc/authkit-nextjs" import { z } from "zod" +import { ensureUserExists } from "@/lib/auth" const verifyEmailSchema = z.object({ code: z.string().min(1, "Verification code is required"), @@ -51,6 +52,15 @@ export async function POST(request: NextRequest) { const workos = getWorkOS() await workos.userManagement.verifyEmail({ userId, code }) + const user = await workos.userManagement.getUser(userId) + await ensureUserExists({ + id: user.id, + email: user.email, + firstName: user.firstName, + lastName: user.lastName, + profilePictureUrl: user.profilePictureUrl, + }) + return NextResponse.json({ success: true, message: "Email verified successfully", diff --git a/src/components/auth/signup-form.tsx b/src/components/auth/signup-form.tsx index 7c96196..5469f7a 100755 --- a/src/components/auth/signup-form.tsx +++ b/src/components/auth/signup-form.tsx @@ -45,11 +45,14 @@ export function SignupForm() { success: boolean message?: string error?: string + userId?: string } if (result.success) { toast.success(result.message || "Account created!") - router.push("/verify-email?email=" + encodeURIComponent(data.email)) + router.push( + `/verify-email?email=${encodeURIComponent(data.email)}&userId=${encodeURIComponent(result.userId ?? "")}` + ) } else { toast.error(result.error || "Signup failed") }