From 712e9224c03c65745de9959f9f00efd691988913 Mon Sep 17 00:00:00 2001 From: DCCONSTRUCTIONS Date: Thu, 14 May 2026 14:16:42 +0300 Subject: [PATCH] FIX - HUB AUTH: prevent request-access login loop --- src/app/LauncherApp.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/app/LauncherApp.tsx b/src/app/LauncherApp.tsx index 3e40b9b..9327537 100644 --- a/src/app/LauncherApp.tsx +++ b/src/app/LauncherApp.tsx @@ -809,7 +809,7 @@ export function LauncherApp() { return ( redirectToLogin(authSession?.authenticated ? "/auth/login?prompt=login" : authSession?.loginUrl)} + onLogin={() => redirectToLogin(authSession?.authenticated ? "/auth/login?prompt=login" : authSession?.loginUrl, { returnTo: "/" })} /> ); } @@ -1551,22 +1551,26 @@ function membershipRoleLabel(role: ClientMembership["role"]) { }[role]; } -function buildLoginRedirectUrl(loginUrl?: string) { +function buildLoginRedirectUrl(loginUrl?: string, options: { returnTo?: string | null } = {}) { const url = new URL(loginUrl || "/auth/login", window.location.origin); - if (!url.searchParams.has("returnTo")) { - const returnTo = `${window.location.pathname}${window.location.search}${window.location.hash}`; + if (options.returnTo === null) { + url.searchParams.delete("returnTo"); + } else if (!url.searchParams.has("returnTo")) { + const returnTo = options.returnTo ?? `${window.location.pathname}${window.location.search}${window.location.hash}`; if (returnTo && returnTo !== "/") { url.searchParams.set("returnTo", returnTo); + } else if (options.returnTo === "/") { + url.searchParams.set("returnTo", "/"); } } return url.origin === window.location.origin ? `${url.pathname}${url.search}${url.hash}` : url.toString(); } -function redirectToLogin(loginUrl?: string) { - const redirectUrl = buildLoginRedirectUrl(loginUrl); +function redirectToLogin(loginUrl?: string, options?: { returnTo?: string | null }) { + const redirectUrl = buildLoginRedirectUrl(loginUrl, options); const now = Date.now(); if (lastAuthRedirect && now - lastAuthRedirect.startedAt < 1500) {