feat(auth): hide Google sign-in until OAuth is configured

Google social login has no credentials in production, so the "Continue with
Google" button (and its divider) errored on click. Gate the button + divider on
a new isGoogleConfigured() helper (requires GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET)
on both the login and signup pages, and guard the signInWithGoogle action as
defense in depth. The button reappears automatically once both env vars are set.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Leon Serfaty
2026-07-03 08:26:08 -04:00
co-authored by Claude Opus 4.8
parent e5e987eb4c
commit 595a5e3e04
4 changed files with 61 additions and 37 deletions
+23 -18
View File
@@ -2,6 +2,7 @@ import Link from "next/link"
import { Logo } from "@/components/shared/logo"
import { TurnstileWidget } from "@/components/shared/turnstile-widget"
import { signUp, signInWithGoogle } from "@/app/actions/auth"
import { isGoogleConfigured } from "@/lib/auth"
export default async function SignupPage({
searchParams,
@@ -47,25 +48,29 @@ export default async function SignupPage({
</div>
<div className="rounded-xl border border-white/10 bg-[#111118] p-8">
{/* Google OAuth */}
<form action={signInWithGoogle}>
<button
type="submit"
className="flex w-full items-center justify-center gap-3 rounded-lg border border-white/10 bg-white/5 px-4 py-2.5 text-sm font-medium text-white transition hover:bg-white/10"
>
<GoogleIcon />
Continue with Google
</button>
</form>
{isGoogleConfigured() && (
<>
{/* Google OAuth */}
<form action={signInWithGoogle}>
<button
type="submit"
className="flex w-full items-center justify-center gap-3 rounded-lg border border-white/10 bg-white/5 px-4 py-2.5 text-sm font-medium text-white transition hover:bg-white/10"
>
<GoogleIcon />
Continue with Google
</button>
</form>
<div className="relative my-6">
<div className="absolute inset-0 flex items-center">
<div className="w-full border-t border-white/10" />
</div>
<div className="relative flex justify-center text-xs">
<span className="bg-[#111118] px-3 text-white/40">or sign up with email</span>
</div>
</div>
<div className="relative my-6">
<div className="absolute inset-0 flex items-center">
<div className="w-full border-t border-white/10" />
</div>
<div className="relative flex justify-center text-xs">
<span className="bg-[#111118] px-3 text-white/40">or sign up with email</span>
</div>
</div>
</>
)}
{error && (
<div className="mb-4 rounded-lg border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-400">