diff --git a/web/packages/accounts/components/LoginContents.tsx b/web/packages/accounts/components/LoginContents.tsx index f3107993f5..8b4b471d08 100644 --- a/web/packages/accounts/components/LoginContents.tsx +++ b/web/packages/accounts/components/LoginContents.tsx @@ -18,10 +18,14 @@ import { z } from "zod/v4"; import { AccountsPageTitleWithCaption } from "./LoginComponents"; interface LoginContentsProps { - /** Called when the user clicks the signup option instead. */ - onSignUp: () => void; - /** Reactive value of {@link customAPIHost}. */ + /** + * Reactive value of {@link customAPIHost}. + */ host: string | undefined; + /** + * Called when the user clicks the signup option instead. + */ + onSignUp: () => void; } /** diff --git a/web/packages/accounts/pages/change-password.tsx b/web/packages/accounts/pages/change-password.tsx index c05ed5f527..88b67b42a9 100644 --- a/web/packages/accounts/pages/change-password.tsx +++ b/web/packages/accounts/pages/change-password.tsx @@ -38,7 +38,7 @@ const Page: React.FC = () => { setUser(user); } else { stashRedirect("/change-password"); - void router.push("/"); + void router.replace("/"); } }, [router]); diff --git a/web/packages/accounts/pages/credentials.tsx b/web/packages/accounts/pages/credentials.tsx index 66cbd2680a..17d4f6afd4 100644 --- a/web/packages/accounts/pages/credentials.tsx +++ b/web/packages/accounts/pages/credentials.tsx @@ -161,13 +161,13 @@ const Page: React.FC = () => { const user = savedPartialLocalUser(); const userEmail = user?.email; if (!userEmail) { - void router.push("/"); + await router.replace("/"); return; } await updateSessionFromElectronSafeStorageIfNeeded(); if ((await masterKeyFromSession()) && (await savedAuthToken())) { - void router.push(appHomeRoute); + await router.replace(appHomeRoute); return; } @@ -203,7 +203,7 @@ const Page: React.FC = () => { // TODO(RE): Why? For now, add a dev mode circuit breaker. if (isDevBuild) throw new Error("Unexpected case reached"); clearLocalStorage(); - void router.push("/"); + void router.replace("/"); return; } setKeyAttributes(keyAttributes); @@ -219,7 +219,7 @@ const Page: React.FC = () => { return; } - void router.push("/"); + void router.replace("/"); })(); }, [router, validateSession, postVerification]); diff --git a/web/packages/accounts/pages/generate.tsx b/web/packages/accounts/pages/generate.tsx index c80fa3db7f..d0b900dc45 100644 --- a/web/packages/accounts/pages/generate.tsx +++ b/web/packages/accounts/pages/generate.tsx @@ -55,15 +55,15 @@ const Page: React.FC = () => { useEffect(() => { const user = savedPartialLocalUser(); if (!user?.email || !user?.token) { - void router.push("/"); + void router.replace("/"); } else if (haveMasterKeyInSession()) { if (savedJustSignedUp()) { setOpenRecoveryKey(true); } else { - void router.push(appHomeRoute); + void router.replace(appHomeRoute); } } else if (savedOriginalKeyAttributes()) { - void router.push("/credentials"); + void router.replace("/credentials"); } else { setUserEmail(user.email); } diff --git a/web/packages/accounts/pages/login.tsx b/web/packages/accounts/pages/login.tsx index 9aab2d2105..bfa311a03a 100644 --- a/web/packages/accounts/pages/login.tsx +++ b/web/packages/accounts/pages/login.tsx @@ -143,7 +143,7 @@ const Page: React.FC = () => { useEffect(() => { void customAPIHost().then(setHost); - if (savedPartialLocalUser()?.email) void router.push("/verify"); + if (savedPartialLocalUser()?.email) void router.replace("/verify"); setLoading(false); }, [router]); diff --git a/web/packages/accounts/pages/passkeys/finish.tsx b/web/packages/accounts/pages/passkeys/finish.tsx index 6d25ba5ba5..f695012368 100644 --- a/web/packages/accounts/pages/passkeys/finish.tsx +++ b/web/packages/accounts/pages/passkeys/finish.tsx @@ -37,7 +37,7 @@ const Page: React.FC = () => { if (!passkeySessionID || !response) return; void saveQueryCredentialsAndNavigateTo(passkeySessionID, response).then( - (slug) => router.push(slug), + (slug) => router.replace(slug), ); }, [router]); diff --git a/web/packages/accounts/pages/recover.tsx b/web/packages/accounts/pages/recover.tsx index 104709b91b..aaace99bc6 100644 --- a/web/packages/accounts/pages/recover.tsx +++ b/web/packages/accounts/pages/recover.tsx @@ -46,22 +46,22 @@ const Page: React.FC = () => { void (async () => { const user = savedPartialLocalUser(); if (!user?.email) { - await router.push("/"); + await router.replace("/"); return; } if (!user.encryptedToken && !user.token) { await sendOTT(user.email, undefined); stashRedirect("/recover"); - await router.push("/verify"); + await router.replace("/verify"); return; } const keyAttributes = savedKeyAttributes(); if (!keyAttributes) { - await router.push("/generate"); + await router.replace("/generate"); } else if (haveMasterKeyInSession()) { - await router.push(appHomeRoute); + await router.replace(appHomeRoute); } else { setKeyAttributes(keyAttributes); } diff --git a/web/packages/accounts/pages/signup.tsx b/web/packages/accounts/pages/signup.tsx index cff9575c76..5d06da4dad 100644 --- a/web/packages/accounts/pages/signup.tsx +++ b/web/packages/accounts/pages/signup.tsx @@ -19,7 +19,7 @@ const Page: React.FC = () => { useEffect(() => { void customAPIHost().then(setHost); - if (savedPartialLocalUser()?.email) void router.push("/verify"); + if (savedPartialLocalUser()?.email) void router.replace("/verify"); setLoading(false); }, [router]); diff --git a/web/packages/accounts/pages/two-factor/recover.tsx b/web/packages/accounts/pages/two-factor/recover.tsx index 6b17dfec6d..c92097ca16 100644 --- a/web/packages/accounts/pages/two-factor/recover.tsx +++ b/web/packages/accounts/pages/two-factor/recover.tsx @@ -71,9 +71,9 @@ const Page: React.FC = ({ twoFactorType }) => { ? user?.passkeySessionID : user?.twoFactorSessionID; if (!user?.email || !sessionID) { - await router.push("/"); + await router.replace("/"); } else if (user.encryptedToken || user.token) { - await router.push("/generate"); + await router.replace("/generate"); } else { setSessionID(sessionID); try { diff --git a/web/packages/accounts/pages/two-factor/verify.tsx b/web/packages/accounts/pages/two-factor/verify.tsx index f56c186f8f..e0038ef9ae 100644 --- a/web/packages/accounts/pages/two-factor/verify.tsx +++ b/web/packages/accounts/pages/two-factor/verify.tsx @@ -36,12 +36,12 @@ const Page: React.FC = () => { useEffect(() => { const user = savedPartialLocalUser(); if (!user?.email || !user.twoFactorSessionID) { - void router.push("/"); + void router.replace("/"); } else if ( !user.isTwoFactorEnabled && (user.encryptedToken || user.token) ) { - void router.push("/credentials"); + void router.replace("/credentials"); } else { setTwoFactorSessionID(user.twoFactorSessionID); } diff --git a/web/packages/accounts/pages/verify.tsx b/web/packages/accounts/pages/verify.tsx index 3817b4d1fa..6a1806c41e 100644 --- a/web/packages/accounts/pages/verify.tsx +++ b/web/packages/accounts/pages/verify.tsx @@ -76,7 +76,7 @@ const Page: React.FC = () => { useEffect(() => { void redirectionIfNeededOrEmail().then((redirectOrEmail) => { if (typeof redirectOrEmail == "string") { - void router.push(redirectOrEmail); + void router.replace(redirectOrEmail); } else { setEmail(redirectOrEmail.email); }