langfuse/langfuse · warning

{}

Error message

{}

What it means

validateSignupEligibility returned a non-empty string, so the endpoint rejects the signup with 422. The empty '{}' message means the serialized error payload was empty — the eligibility failure reason itself was logged under a different key. Eligibility covers signup being disabled, SSO enforcement, allowlists, etc.

Source

Thrown at web/src/pages/api/auth/signup-verify.ts:54

  }

  const parsed = signupVerifySchema.safeParse(req.body);
  if (!parsed.success) {
    res
      .status(422)
      .json({ message: parsed.error.issues[0]?.message ?? "Invalid input" });
    return;
  }

  const { email, name } = parsed.data;
  const normalizedEmail = email.toLowerCase();

  // Run eligibility checks (signup disabled, SSO enforcement, etc.)
  const eligibilityError = await validateSignupEligibility({
    email: normalizedEmail,
  });
  if (eligibilityError) {
    res.status(422).json({ message: eligibilityError });
    return;
  }

  // Check if user already exists
  const existingUser = await prisma.user.findUnique({
    where: { email: normalizedEmail },
  });

  if (existingUser) {
    if (existingUser.password !== null) {
      // User already has a password — they completed signup before
      res.status(422).json({
        message: "User with email already exists. Please sign in.",
      });
      return;
    }
    // Passwordless user exists (abandoned previous attempt) — allow re-sending OTP
    res.status(200).json({ status: "ok" });

View on GitHub (pinned to 59d92c7cf3)

Solutions

  1. Check the returned message body (eligibilityError string) for the real reason — '{}' suggests logging/serialization mismatch
  2. Verify signup-related env vars: AUTH_DISABLE_SIGNUP, SSO enforcement flags
  3. If the email belongs to an SSO-enforced org, complete signup via the SSO flow instead of email OTP
Defensive patterns

Strategy: validation

Validate before calling

const res = await fetch('/api/auth/signup-verify', {...});
if (res.status === 422) {
  const { message } = await res.json();
  if (/sso/i.test(message)) redirect('/auth/signin/sso');
}

Prevention

When it happens

Trigger: POST /api/auth/signup-verify with an email that is required to use SSO (AUTH_FORCE_SESSION or org SSO enforcement), or when signup is disabled via env (e.g. AUTH_DISABLE_SIGNUP), or the email fails an allow/deny list.

Common situations: Self-hosted instances with AUTH_DISABLE_SIGNUP=true; enterprise orgs enforcing SSO where email-password signup is blocked; NEXT_PUBLIC_SIGN_UP_DISABLED features.

Related errors


AI-assisted analysis of langfuse/langfuse@59d92c7cf3 (2026-08-27). Data as JSON: /api/errors/d79c4e2426e87a91. Report an issue: GitHub.