From 36107df3ba37bcd96d2cf5011ef9f07c6f40a21a Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Fri, 7 Feb 2025 17:06:31 -0300 Subject: [PATCH] Add `authSessionResult` on return type --- .changeset/flat-horses-battle.md | 16 ++++++++++++++++ packages/expo/src/hooks/useSSO.ts | 19 ++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 .changeset/flat-horses-battle.md diff --git a/.changeset/flat-horses-battle.md b/.changeset/flat-horses-battle.md new file mode 100644 index 00000000000..52e6f03194e --- /dev/null +++ b/.changeset/flat-horses-battle.md @@ -0,0 +1,16 @@ +--- +'@clerk/clerk-expo': patch +--- + +Accept custom `redirectURL` for SSO callback via `startSSOFlow` + +Usage: + +```ts +await startSSOFlow({ + strategy: "oauth_google", + redirectUrl: AuthSession.makeRedirectUri({ + path: "dashboard" + }), +}); +``` diff --git a/packages/expo/src/hooks/useSSO.ts b/packages/expo/src/hooks/useSSO.ts index d7f3226bc50..8c948248953 100644 --- a/packages/expo/src/hooks/useSSO.ts +++ b/packages/expo/src/hooks/useSSO.ts @@ -6,6 +6,7 @@ import * as WebBrowser from 'expo-web-browser'; import { errorThrower } from '../utils/errors'; export type StartSSOFlowParams = { + redirectUrl?: string; unsafeMetadata?: SignUpUnsafeMetadata; } & ( | { @@ -19,7 +20,7 @@ export type StartSSOFlowParams = { export type StartSSOFlowReturnType = { createdSessionId: string | null; - authSessionResult?: WebBrowser.WebBrowserAuthSessionResult; + authSessionResult: WebBrowser.WebBrowserAuthSessionResult | null; setActive?: SetActive; signIn?: SignInResource; signUp?: SignUpResource; @@ -33,6 +34,7 @@ export function useSSO() { if (!isSignInLoaded || !isSignUpLoaded) { return { createdSessionId: null, + authSessionResult: null, signIn, signUp, setActive, @@ -47,9 +49,11 @@ export function useSSO() { * to include the `rotating_token_nonce` on SSO callback * @ref https://clerk.com/docs/reference/backend-api/tag/Redirect-URLs#operation/CreateRedirectURL */ - const redirectUrl = AuthSession.makeRedirectUri({ - path: 'sso-callback', - }); + const redirectUrl = + startSSOFlowParams.redirectUrl ?? + AuthSession.makeRedirectUri({ + path: 'sso-callback', + }); await signIn.create({ strategy, @@ -62,13 +66,17 @@ export function useSSO() { return errorThrower.throw('Missing external verification redirect URL for SSO flow'); } - const authSessionResult = await WebBrowser.openAuthSessionAsync(externalVerificationRedirectURL.toString()); + const authSessionResult = await WebBrowser.openAuthSessionAsync( + externalVerificationRedirectURL.toString(), + redirectUrl, + ); if (authSessionResult.type !== 'success' || !authSessionResult.url) { return { createdSessionId: null, setActive, signIn, signUp, + authSessionResult, }; } @@ -89,6 +97,7 @@ export function useSSO() { setActive, signIn, signUp, + authSessionResult, }; }