From bcc1dbc284839db0955c172ad2dbe2db7c4eeaa5 Mon Sep 17 00:00:00 2001
From: aarbit
Date: Mon, 28 Sep 2026 09:42:26 -0500
Subject: [PATCH] Fix production auth bugs: swallowed error message, dev hint
leak
CompleteProfileScreen threw a raw PostgrestError (not an Error instance),
so `err instanceof Error` was false and the real message got swallowed.
LoginScreen's Mailpit hint was showing in production; gated behind DEV.
Co-Authored-By: Claude Sonnet 5
Claude-Session: https://claude.ai/code/session_017DUU6CnxECCDeqDNYJgr5x
---
src/components/auth/CompleteProfileScreen.tsx | 5 ++++-
src/components/auth/LoginScreen.tsx | 18 ++++++++++--------
2 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/components/auth/CompleteProfileScreen.tsx b/src/components/auth/CompleteProfileScreen.tsx
index 85b5eab..5643319 100644
--- a/src/components/auth/CompleteProfileScreen.tsx
+++ b/src/components/auth/CompleteProfileScreen.tsx
@@ -25,7 +25,10 @@ export default function CompleteProfileScreen({ onDone }: { onDone: () => void }
const { error } = await supabase.from('profiles').update({ username: username.trim() }).eq('id', user.id)
if (error) {
- throw error.code === '23505' ? new Error('That username is already taken.') : error
+ // PostgrestError is a plain object, not an Error instance — wrap it
+ // so its message survives the catch block below instead of falling
+ // through to the generic fallback message.
+ throw error.code === '23505' ? new Error('That username is already taken.') : new Error(error.message)
}
onDone()
} catch (err) {
diff --git a/src/components/auth/LoginScreen.tsx b/src/components/auth/LoginScreen.tsx
index 45ec20a..5f218b8 100644
--- a/src/components/auth/LoginScreen.tsx
+++ b/src/components/auth/LoginScreen.tsx
@@ -67,13 +67,15 @@ export default function LoginScreen() {
We sent a confirmation link to {email}. You'll need to confirm
before you can sign in.
-
- Local dev: open Mailpit at{' '}
-
- 127.0.0.1:54324
- {' '}
- to see it — no real email is sent.
-
+ {import.meta.env.DEV && (
+
+ Local dev: open Mailpit at{' '}
+
+ 127.0.0.1:54324
+ {' '}
+ to see it — no real email is sent.
+