Don't add a history entry for automated client routing redirects

This commit is contained in:
Manav Rathi
2025-07-04 09:36:11 +05:30
parent 7dabd9545e
commit a2072c022c
11 changed files with 27 additions and 23 deletions

View File

@@ -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;
}
/**

View File

@@ -38,7 +38,7 @@ const Page: React.FC = () => {
setUser(user);
} else {
stashRedirect("/change-password");
void router.push("/");
void router.replace("/");
}
}, [router]);

View File

@@ -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]);

View File

@@ -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);
}

View File

@@ -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]);

View File

@@ -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]);

View File

@@ -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);
}

View File

@@ -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]);

View File

@@ -71,9 +71,9 @@ const Page: React.FC<RecoverPageProps> = ({ 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 {

View File

@@ -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);
}

View File

@@ -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);
}