Fallback to server check when session missing
cgen-21ea10034ec94719a50ac57c0d1ec4fc
This commit is contained in:
parent
8e28a79aa0
commit
65c82316af
1 changed files with 66 additions and 0 deletions
|
|
@ -192,6 +192,72 @@ export default function Welcome({
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error("Check verification failed", error);
|
console.error("Check verification failed", error);
|
||||||
|
|
||||||
|
// If the client has no active session (common in signup flows), fall back
|
||||||
|
// to a server-side check using the admin Supabase client.
|
||||||
|
const isSessionMissing =
|
||||||
|
(error && ((error.name && error.name.includes("AuthSessionMissing")) || (error.message && error.message.includes("Auth session missing")))) ||
|
||||||
|
false;
|
||||||
|
|
||||||
|
if (isSessionMissing && emailAddress) {
|
||||||
|
try {
|
||||||
|
const resp = await fetch("/api/auth/check-verification", {
|
||||||
|
method: "POST",
|
||||||
|
headers: { "Content-Type": "application/json" },
|
||||||
|
body: JSON.stringify({ email: emailAddress }),
|
||||||
|
});
|
||||||
|
|
||||||
|
const payload = await resp.json().catch(() => ({} as any));
|
||||||
|
if (!resp.ok) {
|
||||||
|
console.error("Server check-verification failed", payload);
|
||||||
|
toastError({
|
||||||
|
title: "Unable to verify",
|
||||||
|
description: payload?.error || "Server check failed",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
const confirmed = Boolean(payload?.verified);
|
||||||
|
if (confirmed) {
|
||||||
|
setIsVerified(true);
|
||||||
|
setFallbackVerificationLink(null);
|
||||||
|
toastSuccess({
|
||||||
|
title: "Email verified",
|
||||||
|
description: "You're all set. You can sign in with this email.",
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await refreshProfile();
|
||||||
|
} catch (refreshError) {
|
||||||
|
console.warn(
|
||||||
|
"Unable to refresh profile after verification",
|
||||||
|
refreshError,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toastInfo({
|
||||||
|
title: "Verification pending",
|
||||||
|
description:
|
||||||
|
"We still don't see the confirmation. Check your inbox or resend the email.",
|
||||||
|
});
|
||||||
|
|
||||||
|
// If the server returned a verification link (manual fallback), surface it.
|
||||||
|
if (payload?.user && payload?.user?.email && payload?.user?.confirmation_sent_at && !payload?.verified) {
|
||||||
|
// nothing specific to do here other than logging
|
||||||
|
console.debug("User found but not verified", payload.user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: any) {
|
||||||
|
console.error("Server-side check failed", e);
|
||||||
|
toastError({
|
||||||
|
title: "Unable to verify",
|
||||||
|
description: e?.message || "Server verification failed",
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
setIsCheckingVerification(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
toastError({
|
toastError({
|
||||||
title: "Unable to verify",
|
title: "Unable to verify",
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue