Skip to content

Commit 285cf59

Browse files
authored
fix(web): preserve desktop route during Clerk auth (#5770)
1 parent 1a003e3 commit 285cf59

2 files changed

Lines changed: 27 additions & 9 deletions

File tree

apps/web/src/components/clerk/authRedirect.test.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,22 @@ describe("resolveClerkSignInProps", () => {
88
expect(resolveClerkSignInProps(href, false)).toEqual({ forceRedirectUrl: href });
99
});
1010

11-
it("omits the redirect override on packaged desktop", () => {
12-
expect(resolveClerkSignInProps("t3code://app/#/settings/general", true)).toEqual({});
11+
it("removes a Clerk virtual pathname and callback params while preserving the desktop route", () => {
12+
expect(
13+
resolveClerkSignInProps(
14+
"t3code://app/CLERK-ROUTER/VIRTUAL/sign-up?__clerk_status=complete#/settings/connections",
15+
true,
16+
),
17+
).toEqual({
18+
forceRedirectUrl: "t3code://app/#/settings/connections",
19+
signUpForceRedirectUrl: "t3code://app/#/settings/connections",
20+
});
1321
});
1422

15-
it("omits the redirect override on development desktop", () => {
16-
expect(resolveClerkSignInProps("t3code-dev://app/#/settings/general", true)).toEqual({});
23+
it("preserves a clean development desktop route", () => {
24+
expect(resolveClerkSignInProps("t3code-dev://app/#/settings/general", true)).toEqual({
25+
forceRedirectUrl: "t3code-dev://app/#/settings/general",
26+
signUpForceRedirectUrl: "t3code-dev://app/#/settings/general",
27+
});
1728
});
1829
});
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
export interface ClerkSignInProps {
22
forceRedirectUrl?: string;
3+
signUpForceRedirectUrl?: string;
34
}
45

5-
// Clerk's native-app allowlist only authorizes the bare renderer root
6-
// (t3code://app/), which @clerk/electron's OAuth transport already supplies,
7-
// so any page-derived redirect override gets the whole sign-in request
8-
// rejected. On Electron, omit the override and let Clerk use its defaults.
96
export function resolveClerkSignInProps(href: string, isElectron: boolean): ClerkSignInProps {
10-
if (isElectron) return {};
7+
if (isElectron) {
8+
// Electron routes through the hash, so reset any Clerk virtual pathname without losing the T3 page.
9+
const redirectUrl = new URL(href);
10+
redirectUrl.pathname = "/";
11+
redirectUrl.search = "";
12+
13+
return {
14+
forceRedirectUrl: redirectUrl.toString(),
15+
signUpForceRedirectUrl: redirectUrl.toString(),
16+
};
17+
}
1118
return { forceRedirectUrl: href };
1219
}

0 commit comments

Comments
 (0)