diff --git a/apps/console/src/hooks/useSafeContinueUrl.ts b/apps/console/src/hooks/useSafeContinueUrl.ts index 808a94cbe..b2ceb49d7 100644 --- a/apps/console/src/hooks/useSafeContinueUrl.ts +++ b/apps/console/src/hooks/useSafeContinueUrl.ts @@ -1,22 +1,23 @@ +import { useMemo } from "react"; import { useSearchParams } from "react-router"; -export function useSafeContinueUrl(fallbackUrl?: URL): URL { - fallbackUrl = new URL(fallbackUrl ?? window.location.origin, window.location.origin); +export function useSafeContinueUrl(fallback?: string): URL { const [searchParams] = useSearchParams(); const continueUrlParam = searchParams.get("continue"); - let safeContinueUrl: URL; - if (continueUrlParam) { - let continueUrl: URL; - try { - continueUrl = new URL(continueUrlParam, window.location.origin); - } catch { - continueUrl = fallbackUrl; + const safeContinueUrl = useMemo(() => { + if (continueUrlParam) { + let continueUrl: URL; + try { + continueUrl = new URL(continueUrlParam, window.location.origin); + } catch { + continueUrl = new URL(fallback ?? window.location.origin, window.location.origin); + } + return new URL(continueUrl.pathname + continueUrl.search, window.location.origin); + } else { + return new URL(fallback ?? window.location.origin, window.location.origin); } - safeContinueUrl = new URL(continueUrl.pathname + continueUrl.search, window.location.origin); - } else { - safeContinueUrl = fallbackUrl; - } + }, [continueUrlParam, fallback]); return safeContinueUrl; } diff --git a/apps/console/src/pages/iam/auth/CreatePasswordPage.tsx b/apps/console/src/pages/iam/auth/CreatePasswordPage.tsx index c03918b5e..fe9c04508 100644 --- a/apps/console/src/pages/iam/auth/CreatePasswordPage.tsx +++ b/apps/console/src/pages/iam/auth/CreatePasswordPage.tsx @@ -3,7 +3,7 @@ import { usePageTitle } from "@probo/hooks"; import { useTranslate } from "@probo/i18n"; import { Button, Field, useToast } from "@probo/ui"; import { useMutation } from "react-relay"; -import { Link, useLocation, useNavigate, useSearchParams } from "react-router"; +import { Link, useNavigate, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; import { z } from "zod"; @@ -27,7 +27,6 @@ export default function CreatePasswordPage() { const { toast } = useToast(); const [searchParams] = useSearchParams(); const navigate = useNavigate(); - const location = useLocation(); usePageTitle(__("Create Password")); @@ -62,9 +61,11 @@ export default function CreatePasswordPage() { description: __("Account created successfully"), variant: "success", }); + + searchParams.delete("token"); void navigate({ pathname: "/auth/login", - search: location.search, + search: "?" + searchParams.toString(), }, { replace: true, }); diff --git a/apps/console/src/pages/iam/organizations/AssumePage.tsx b/apps/console/src/pages/iam/organizations/AssumePage.tsx index 057facb47..2045921ac 100644 --- a/apps/console/src/pages/iam/organizations/AssumePage.tsx +++ b/apps/console/src/pages/iam/organizations/AssumePage.tsx @@ -49,9 +49,7 @@ export function AssumePage(props: { queryRef: PreloadedQuery }) const [searchParams] = useSearchParams(); const { __ } = useTranslate(); - const safeContinueUrl = useSafeContinueUrl( - new URL(window.location.origin + `/organizations/${organizationId}`), - ); + const safeContinueUrl = useSafeContinueUrl(`/organizations/${organizationId}`); const { viewer } = usePreloadedQuery(assumePageQuery, queryRef); const [assumeOrganizationSession] = useMutation(assumeMutation);