diff --git a/.changeset/warm-lies-dance.md b/.changeset/warm-lies-dance.md new file mode 100644 index 00000000000..ab0c5fe4e65 --- /dev/null +++ b/.changeset/warm-lies-dance.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Fix multi-session navigation for hash routing diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index dcfedb41224..261031cb60e 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1580,20 +1580,27 @@ export class Clerk implements ClerkInterface { } public buildAfterMultiSessionSingleSignOutUrl(): string { - if (!this.#options.afterMultiSessionSingleSignOutUrl) { + if (!this.environment) { + return ''; + } + + if (this.#options.afterMultiSessionSingleSignOutUrl) { + return this.buildUrlWithAuth(this.#options.afterMultiSessionSingleSignOutUrl); + } + + if (this.#options.signInUrl) { return this.buildUrlWithAuth( buildURL( { - base: this.#options.signInUrl - ? `${this.#options.signInUrl}/choose` - : this.environment?.displayConfig.afterSignOutOneUrl, + base: this.#options.signInUrl, + hashPath: 'choose', }, { stringify: true }, ), ); } - return this.buildUrlWithAuth(this.#options.afterMultiSessionSingleSignOutUrl); + return this.buildUrlWithAuth(this.environment.displayConfig.afterSignOutOneUrl); } public buildCreateOrganizationUrl(): string { diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx index bd4385f4afd..ec8d84c5978 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx @@ -15,14 +15,14 @@ import { useMultisessionActions } from '../UserButton/useMultisessionActions'; const SignInAccountSwitcherInternal = () => { const card = useCardState(); const { userProfileUrl } = useEnvironment().displayConfig; - const { afterSignInUrl, path: signInPath } = useSignInContext(); + const { afterSignInUrl, path: signInPath, signInUrl } = useSignInContext(); const { navigateAfterSignOut } = useSignOutContext(); const { handleSignOutAllClicked, handleSessionClicked, signedInSessions, handleAddAccountClicked } = useMultisessionActions({ navigateAfterSignOut, afterSwitchSessionUrl: afterSignInUrl, userProfileUrl, - signInUrl: signInPath, + signInUrl: signInPath ?? signInUrl, user: undefined, });