From a2bb8f3c2f1207527c35a33e5d7976c06c0ec2b1 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 7 Aug 2026 08:52:41 -0700 Subject: [PATCH] fix(login): memoize submitVerify to satisfy exhaustive-deps The lint rule flagged the un-memoized submitVerify once it entered the dependency graph of submitRegisterAndContinue. Wrapping it in useCallback keeps the auto-submit effect stable instead of re-firing on every render. --- .../login/src/components/register-passkey.tsx | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/apps/login/src/components/register-passkey.tsx b/apps/login/src/components/register-passkey.tsx index 39fde74050..8ade63512b 100644 --- a/apps/login/src/components/register-passkey.tsx +++ b/apps/login/src/components/register-passkey.tsx @@ -76,31 +76,34 @@ export function RegisterPasskey({ [organization, requestId, sessionId, userId, initialLoginName, router], ); - async function submitVerify( - passkeyId: string, - passkeyName: string, - publicKeyCredential: any, - currentSessionId?: string, - currentUserId?: string, - ) { - setLoading(true); - const response = await verifyPasskeyRegistration({ - passkeyId, - passkeyName, - publicKeyCredential, - sessionId: currentSessionId, - userId: currentUserId, - }) - .catch(() => { - setError(t("set.errors.couldNotVerifyPasskey")); - return; + const submitVerify = useCallback( + async ( + passkeyId: string, + passkeyName: string, + publicKeyCredential: any, + currentSessionId?: string, + currentUserId?: string, + ) => { + setLoading(true); + const response = await verifyPasskeyRegistration({ + passkeyId, + passkeyName, + publicKeyCredential, + sessionId: currentSessionId, + userId: currentUserId, }) - .finally(() => { - setLoading(false); - }); + .catch(() => { + setError(t("set.errors.couldNotVerifyPasskey")); + return; + }) + .finally(() => { + setLoading(false); + }); - return response; - } + return response; + }, + [t], + ); const submitRegisterAndContinue = useCallback(async (): Promise => { // Require either sessionId or userId @@ -208,7 +211,7 @@ export function RegisterPasskey({ } continueAndLogin(verificationResponse.loginName); - }, [sessionId, userId, code, codeId, continueAndLogin, t]); + }, [sessionId, userId, code, codeId, continueAndLogin, submitVerify, t]); // Auto-submit when code is provided (similar to VerifyForm) useEffect(() => {