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.
This commit is contained in:
Nicholai Vogel 2026-02-16 19:46:48 -07:00
parent feb7dc2643
commit 4fc952cddd
2 changed files with 14 additions and 1 deletions

View File

@ -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",

View File

@ -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")
}