diff --git a/packages/core/src/App/AppContent.tsx b/packages/core/src/App/AppContent.tsx index 343ace08d689..85d5ebcb9683 100644 --- a/packages/core/src/App/AppContent.tsx +++ b/packages/core/src/App/AppContent.tsx @@ -50,6 +50,7 @@ const AppContent: React.FC<{ passthrough: unknown }> = observer(({ passthrough } setIsPhoneNumberVerificationEnabled, setIsCountryCodeDropdownEnabled, accounts, + prevent_single_login, } = store.client; const { first_name, last_name } = account_settings; const { current_language, changeSelectedLanguage } = store.common; @@ -72,6 +73,7 @@ const AppContent: React.FC<{ passthrough: unknown }> = observer(({ passthrough } is_client_store_initialized, isOAuth2Enabled, oAuthLogout, + prevent_single_login, }); const [isWebPasskeysFFEnabled, isGBLoaded] = useGrowthbookIsOn({ diff --git a/packages/core/src/App/Containers/RootComponent/root-component.jsx b/packages/core/src/App/Containers/RootComponent/root-component.jsx index 55fa4783646f..1e2f085dbd5b 100644 --- a/packages/core/src/App/Containers/RootComponent/root-component.jsx +++ b/packages/core/src/App/Containers/RootComponent/root-component.jsx @@ -25,7 +25,7 @@ const RootComponent = observer(props => { setIsWalletsOnboardingTourGuideVisible, notification_messages_ui, } = ui; - const { has_wallet, logout, prevent_redirect_to_hub, is_client_store_initialized } = client; + const { has_wallet, logout, prevent_redirect_to_hub, is_client_store_initialized, setPreventSingleLogin } = client; const { oAuthLogout } = useOauth2({ handleLogout: logout }); @@ -37,6 +37,10 @@ const RootComponent = observer(props => { const PRODUCTION_REDIRECT_URL = 'https://hub.deriv.com/tradershub/home'; const STAGING_REDIRECT_URL = 'https://staging-hub.deriv.com/tradershub/home'; + useEffect(() => { + setPreventSingleLogin(true); + }, []); + useEffect(() => { if (isHubRedirectionEnabled && has_wallet && !prevent_redirect_to_hub && is_client_store_initialized) { const redirectUrl = process.env.NODE_ENV === 'production' ? PRODUCTION_REDIRECT_URL : STAGING_REDIRECT_URL; @@ -50,6 +54,11 @@ const RootComponent = observer(props => { localStorage.removeItem('active_wallet_loginid'); window.location.assign(redirectUrl); } + + const shouldStayInDerivApp = !isHubRedirectionEnabled || !has_wallet || prevent_redirect_to_hub; + if (is_client_store_initialized && shouldStayInDerivApp) { + setPreventSingleLogin(false); + } }, [isHubRedirectionEnabled, has_wallet, prevent_redirect_to_hub, is_client_store_initialized]); return has_wallet ? ( diff --git a/packages/core/src/Stores/client-store.js b/packages/core/src/Stores/client-store.js index ce211e9afebe..cc7b06e769ac 100644 --- a/packages/core/src/Stores/client-store.js +++ b/packages/core/src/Stores/client-store.js @@ -115,6 +115,7 @@ export default class ClientStore extends BaseStore { currency: '', }; prevent_redirect_to_hub = false; + prevent_single_login = false; verification_code = { signup: '', @@ -241,6 +242,7 @@ export default class ClientStore extends BaseStore { prev_real_account_loginid: observable, prev_account_type: observable, prevent_redirect_to_hub: observable, + prevent_single_login: observable, phone_settings: observable, is_already_attempted: observable, is_p2p_enabled: observable, @@ -951,6 +953,10 @@ export default class ClientStore extends BaseStore { this.prevent_redirect_to_hub = value; }; + setPreventSingleLogin = value => { + this.prevent_single_login = value; + }; + getIsMarketTypeMatching = (account, market_type) => { if (market_type === 'synthetic') { return account.market_type === market_type || account.market_type === 'gaming'; diff --git a/packages/hooks/src/useSilentLoginAndLogout.ts b/packages/hooks/src/useSilentLoginAndLogout.ts index 284a007578cc..17d14419435b 100644 --- a/packages/hooks/src/useSilentLoginAndLogout.ts +++ b/packages/hooks/src/useSilentLoginAndLogout.ts @@ -16,10 +16,12 @@ const useSilentLoginAndLogout = ({ is_client_store_initialized, isOAuth2Enabled, oAuthLogout, + prevent_single_login, }: { is_client_store_initialized: boolean; isOAuth2Enabled: boolean; oAuthLogout: () => Promise; + prevent_single_login: boolean; }) => { const loggedState = Cookies.get('logged_state'); @@ -29,6 +31,7 @@ const useSilentLoginAndLogout = ({ window.location.pathname.includes('callback') || window.location.pathname.includes('endpoint'); useEffect(() => { + if (prevent_single_login) return; // NOTE: Remove this logic once social signup is intergated with OIDC const params = new URLSearchParams(window.location.search); const isUsingLegacyFlow = params.has('token1') && params.has('acct1'); @@ -68,6 +71,7 @@ const useSilentLoginAndLogout = ({ isOAuth2Enabled, oAuthLogout, isSilentLoginExcluded, + prevent_single_login, ]); }; diff --git a/packages/stores/types.ts b/packages/stores/types.ts index 4b601d36aae9..d79f87439b2a 100644 --- a/packages/stores/types.ts +++ b/packages/stores/types.ts @@ -542,7 +542,9 @@ export type TClientStore = { standpoint: TStandPoint; is_p2p_available: boolean; prevent_redirect_to_hub: boolean; + prevent_single_login: boolean; setPreventRedirectToHub: (value: boolean) => void; + setPreventSingleLogin: (value: boolean) => void; setAccountStatus: (status?: GetAccountStatus) => void; setBalanceOtherAccounts: (balance: number) => void; selectCurrency: (currency: string) => void;