History

fix(desktop): restore T3 Connect sign-in (#4809)

Alex committed 3 months agov0.0.31-nightly.20260729.944

Commit 1b4830f1 parent 694f8d14 files · +40 −3Browse files

Unified · Split

4 files
  1. apps/web/src/components/clerk/authRedirect.test.ts +18 −0
  2. apps/web/src/components/clerk/authRedirect.ts +12 −0
  3. apps/web/src/components/clerk/useT3ConnectAuthPrompt.tsx +4 −1
  4. apps/web/src/components/cloud/ConnectCliAuthSurface.tsx +6 −2
apps/web/src/components/clerk/authRedirect.test.ts+18−0
@@ -0,0 +1,18 @@
1+import { describe, expect, it } from "vite-plus/test";
2+
3+import { resolveClerkSignInProps } from "./authRedirect";
4+
5+describe("resolveClerkSignInProps", () => {
6+ it("returns to the current browser URL on the web", () => {
7+ const href = "https://app.t3.codes/connect?state=state-1#details";
8+ expect(resolveClerkSignInProps(href, false)).toEqual({ forceRedirectUrl: href });
9+ });
10+
11+ it("omits the redirect override on packaged desktop", () => {
12+ expect(resolveClerkSignInProps("t3code://app/#/settings/general", true)).toEqual({});
13+ });
14+
15+ it("omits the redirect override on development desktop", () => {
16+ expect(resolveClerkSignInProps("t3code-dev://app/#/settings/general", true)).toEqual({});
17+ });
18+});
apps/web/src/components/clerk/authRedirect.ts+12−0
@@ -0,0 +1,12 @@
1+export interface ClerkSignInProps {
2+ forceRedirectUrl?: string;
3+}
4+
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.
9+export function resolveClerkSignInProps(href: string, isElectron: boolean): ClerkSignInProps {
10+ if (isElectron) return {};
11+ return { forceRedirectUrl: href };
12+}
apps/web/src/components/clerk/useT3ConnectAuthPrompt.tsx+4−1
@@ -1,9 +1,12 @@
11 import { useClerk } from "@clerk/react";
22
3+import { isElectron } from "../../env";
4+import { resolveClerkSignInProps } from "./authRedirect";
5+
36 export function useT3ConnectAuthPrompt() {
47 const clerk = useClerk();
58 const openAuthPrompt = () => {
6− clerk.openSignIn({ forceRedirectUrl: window.location.href });
9+ clerk.openSignIn(resolveClerkSignInProps(window.location.href, isElectron));
710 };
811 return { authPrompt: null, openAuthPrompt };
912 }
apps/web/src/components/cloud/ConnectCliAuthSurface.tsx+6−2
@@ -8,8 +8,10 @@ import { · 7 unmodified lines
88 readConnectCliCallbackResult,
99 rememberConnectCliAuthState,
1010 } from "../../cloud/connectCliAuth";
11+import { isElectron } from "../../env";
1112 import { useCopyToClipboard } from "../../hooks/useCopyToClipboard";
1213 import { AuthSurfaceShell } from "../auth/AuthSurfaceShell";
14+import { resolveClerkSignInProps } from "../clerk/authRedirect";
1315 import { Button } from "../ui/button";
1416
1517 function ConnectCliAuthMessage({
@@ -59,7 +61,7 @@ export function ConnectCliAuthorizeSurface() { · 43 unmodified lines
5961 if (!isSignedIn) {
6062 if (!signInOpened.current) {
6163 signInOpened.current = true;
62− clerk.openSignIn({ forceRedirectUrl: window.location.href });
64+ clerk.openSignIn(resolveClerkSignInProps(window.location.href, isElectron));
6365 }
6466 return;
6567 }
@@ -95,7 +97,9 @@ export function ConnectCliAuthorizeSurface() { · 29 unmodified lines
9597 <div className="mt-6">
9698 <Button
9799 type="button"
98− onClick={() => clerk.openSignIn({ forceRedirectUrl: window.location.href })}
100+ onClick={() =>
101+ clerk.openSignIn(resolveClerkSignInProps(window.location.href, isElectron))
102+ }
99103 >
100104 Sign in
101105 </Button>