Skip to content

Commit 7df6eba

Browse files
committed
fix(clerk-js): Handle two factor redirect when authenticate with web3
1 parent 5fd5f91 commit 7df6eba

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

packages/clerk-js/src/core/clerk.ts

+22-3
Original file line numberDiff line numberDiff line change
@@ -1826,6 +1826,7 @@ export class Clerk implements ClerkInterface {
18261826
unsafeMetadata,
18271827
strategy,
18281828
legalAccepted,
1829+
secondFactorUrl,
18291830
}: ClerkAuthenticateWithWeb3Params): Promise<void> => {
18301831
if (__BUILD_DISABLE_RHC__) {
18311832
clerkUnsupportedEnvironmentWarning('Web3');
@@ -1835,6 +1836,9 @@ export class Clerk implements ClerkInterface {
18351836
if (!this.client || !this.environment) {
18361837
return;
18371838
}
1839+
1840+
const { displayConfig } = this.environment;
1841+
18381842
const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider;
18391843
const identifier = await getWeb3Identifier({ provider });
18401844
const generateSignature =
@@ -1844,9 +1848,24 @@ export class Clerk implements ClerkInterface {
18441848
? generateSignatureWithCoinbaseWallet
18451849
: generateSignatureWithOKXWallet;
18461850

1847-
const navigate = (to: string) =>
1851+
const makeNavigate = (to: string) => () =>
18481852
customNavigate && typeof customNavigate === 'function' ? customNavigate(to) : this.navigate(to);
18491853

1854+
const navigateToFactorTwo = makeNavigate(
1855+
secondFactorUrl || buildURL({ base: displayConfig.signInUrl, hashPath: '/factor-two' }, { stringify: true }),
1856+
);
1857+
1858+
const navigateToContinueSignUp = makeNavigate(
1859+
signUpContinueUrl ||
1860+
buildURL(
1861+
{
1862+
base: displayConfig.signUpUrl,
1863+
hashPath: '/continue',
1864+
},
1865+
{ stringify: true },
1866+
),
1867+
);
1868+
18501869
let signInOrSignUp: SignInResource | SignUpResource;
18511870
try {
18521871
signInOrSignUp = await this.client.signIn.authenticateWithWeb3({
@@ -1869,7 +1888,7 @@ export class Clerk implements ClerkInterface {
18691888
signInOrSignUp.status === 'missing_requirements' &&
18701889
signInOrSignUp.verifications.web3Wallet.status === 'verified'
18711890
) {
1872-
await navigate(signUpContinueUrl);
1891+
await navigateToContinueSignUp();
18731892
}
18741893
} else {
18751894
throw err;
@@ -1878,7 +1897,7 @@ export class Clerk implements ClerkInterface {
18781897

18791898
switch (signInOrSignUp.status) {
18801899
case 'needs_second_factor':
1881-
await navigate('factor-two');
1900+
await navigateToFactorTwo();
18821901
break;
18831902
case 'complete':
18841903
if (signInOrSignUp.createdSessionId) {

packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export const SignInSocialButtons = React.memo((props: SocialButtonsProps) => {
5454
redirectUrl: redirectUrlComplete,
5555
signUpContinueUrl: ctx.isCombinedFlow ? 'create/continue' : ctx.signUpContinueUrl,
5656
strategy,
57+
secondFactorUrl: 'factor-two',
5758
})
5859
.catch(err => web3CallbackErrorHandler(err, card.setError));
5960
}}

packages/types/src/clerk.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1589,6 +1589,7 @@ export interface ClerkAuthenticateWithWeb3Params {
15891589
unsafeMetadata?: SignUpUnsafeMetadata;
15901590
strategy: Web3Strategy;
15911591
legalAccepted?: boolean;
1592+
secondFactorUrl?: string;
15921593
}
15931594

15941595
export type JoinWaitlistParams = {

0 commit comments

Comments
 (0)