Skip to content

Commit d2f03a4

Browse files
authored
Use webauthnId instead of identifierValue (#541)
1 parent fd04562 commit d2f03a4

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

packages/connect-react/src/components/login/LoginErrorScreenHard.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import useShared from '../../hooks/useShared';
88
import { LoginScreenType } from '../../types/screenTypes';
99
import { getLoginErrorMessage, LoginSituationCode } from '../../types/situations';
1010
import LoginErrorHard from './base/LoginErrorHard';
11-
import { type CboApiFallbackOperationError, connectLoginFinishToComplete } from './LoginInitScreen';
11+
import {
12+
type CboApiFallbackOperationError,
13+
connectLoginFinishToComplete,
14+
connectLoginFinishToWebauthnId,
15+
} from './LoginInitScreen';
1216

1317
type Props = {
1418
previousAssertionOptions: string;
@@ -64,7 +68,7 @@ const LoginErrorScreenHard = ({ previousAssertionOptions }: Props) => {
6468
await config.onComplete(
6569
connectLoginFinishToComplete(resFinish.val),
6670
getConnectService().encodeClientState(),
67-
resFinish.val.passkeyOperation.identifierValue,
71+
connectLoginFinishToWebauthnId(resFinish.val),
6872
);
6973
} catch {
7074
return handleSituation(LoginSituationCode.CtApiNotAvailablePostAuthenticator);

packages/connect-react/src/components/login/LoginErrorScreenSoft.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { LoginScreenType } from '../../types/screenTypes';
99
import { getLoginErrorMessage, LoginSituationCode } from '../../types/situations';
1010
import LoginErrorSoft from './base/LoginErrorSoft';
1111
import type { CboApiFallbackOperationError } from './LoginInitScreen';
12-
import { connectLoginFinishToComplete } from './LoginInitScreen';
12+
import { connectLoginFinishToComplete, connectLoginFinishToWebauthnId } from './LoginInitScreen';
1313

1414
type Props = {
1515
previousAssertionOptions: string;
@@ -59,7 +59,7 @@ const LoginErrorScreenSoft = ({ previousAssertionOptions }: Props) => {
5959
await config.onComplete(
6060
connectLoginFinishToComplete(resFinish.val),
6161
getConnectService().encodeClientState(),
62-
resFinish.val.passkeyOperation.identifierValue,
62+
connectLoginFinishToWebauthnId(resFinish.val),
6363
);
6464
setLoading(false);
6565
} catch {

packages/connect-react/src/components/login/LoginHybridScreen.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import useShared from '../../hooks/useShared';
99
import { LoginScreenType } from '../../types/screenTypes';
1010
import { getLoginErrorMessage, LoginSituationCode } from '../../types/situations';
1111
import LoginHybrid from './base/LoginHybrid';
12-
import { connectLoginFinishToComplete } from './LoginInitScreen';
12+
import { connectLoginFinishToComplete, connectLoginFinishToWebauthnId } from './LoginInitScreen';
1313

1414
const LoginHybridScreen = (resStart: ConnectLoginStartRsp) => {
1515
const { config, navigateToScreen, currentIdentifier, fallback } = useLoginProcess();
@@ -35,7 +35,7 @@ const LoginHybridScreen = (resStart: ConnectLoginStartRsp) => {
3535
await config.onComplete(
3636
connectLoginFinishToComplete(res.val),
3737
getConnectService().encodeClientState(),
38-
res.val.passkeyOperation.identifierValue,
38+
connectLoginFinishToWebauthnId(res.val),
3939
);
4040
} catch {
4141
return handleSituation(LoginSituationCode.CtApiNotAvailablePostAuthenticator);

packages/connect-react/src/components/login/LoginInitScreen.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ConnectError } from '@corbado/web-core';
2-
import { ConnectErrorType, PasskeyLoginSource } from '@corbado/web-core';
2+
import { base64decode, ConnectErrorType, PasskeyLoginSource } from '@corbado/web-core';
33
import type { ConnectLoginFinishRsp } from '@corbado/web-core/dist/api/v2';
44
import log from 'loglevel';
55
import type { FC } from 'react';
@@ -39,6 +39,13 @@ export const connectLoginFinishToComplete = (v: ConnectLoginFinishRsp): string =
3939
return v.signedPasskeyData;
4040
};
4141

42+
export const connectLoginFinishToWebauthnId = (v: ConnectLoginFinishRsp): string => {
43+
const parts = v.signedPasskeyData.split('.');
44+
const base64decoded = JSON.parse(base64decode(parts[1]));
45+
46+
return base64decoded['webauthnId'];
47+
};
48+
4249
const LoginInitScreen: FC<Props> = ({ showFallback = false }) => {
4350
const { config, navigateToScreen, setCurrentIdentifier, setFlags, flags, loadedMs, fallback } = useLoginProcess();
4451
const { sharedConfig, getConnectService } = useShared();
@@ -181,7 +188,7 @@ const LoginInitScreen: FC<Props> = ({ showFallback = false }) => {
181188
await config.onComplete(
182189
connectLoginFinishToComplete(res.val),
183190
getConnectService().encodeClientState(),
184-
res.val.passkeyOperation.identifierValue,
191+
connectLoginFinishToWebauthnId(res.val),
185192
);
186193
} catch {
187194
return handleSituation(LoginSituationCode.CtApiNotAvailablePostAuthenticator);
@@ -235,7 +242,7 @@ const LoginInitScreen: FC<Props> = ({ showFallback = false }) => {
235242
await config.onComplete(
236243
connectLoginFinishToComplete(res.val),
237244
getConnectService().encodeClientState(),
238-
res.val.passkeyOperation.identifierValue,
245+
connectLoginFinishToWebauthnId(res.val),
239246
);
240247
} catch {
241248
void getConnectService().recordEventLoginErrorUntyped();

packages/connect-react/src/components/login/LoginPasskeyReLoginScreen.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ import useShared from '../../hooks/useShared';
88
import { LoginScreenType } from '../../types/screenTypes';
99
import { getLoginErrorMessage, LoginSituationCode } from '../../types/situations';
1010
import LoginOneTap from './base/LoginOneTap';
11-
import { type CboApiFallbackOperationError, connectLoginFinishToComplete } from './LoginInitScreen';
11+
import {
12+
type CboApiFallbackOperationError,
13+
connectLoginFinishToComplete,
14+
connectLoginFinishToWebauthnId,
15+
} from './LoginInitScreen';
1216

1317
export const LoginPasskeyReLoginScreen = () => {
1418
const { config, navigateToScreen, setCurrentIdentifier, currentIdentifier, loadedMs, fallback } = useLoginProcess();
@@ -56,7 +60,7 @@ export const LoginPasskeyReLoginScreen = () => {
5660
await config.onComplete(
5761
connectLoginFinishToComplete(resFinish.val),
5862
getConnectService().encodeClientState(),
59-
resFinish.val.passkeyOperation.identifierValue,
63+
connectLoginFinishToWebauthnId(resFinish.val),
6064
);
6165
} catch {
6266
return handleSituation(LoginSituationCode.CtApiNotAvailablePostAuthenticator);

0 commit comments

Comments
 (0)