diff --git a/backend/app/routers/auth.py b/backend/app/routers/auth.py
index afb7289..053ed04 100644
--- a/backend/app/routers/auth.py
+++ b/backend/app/routers/auth.py
@@ -553,6 +553,7 @@ async def auth_status(
"has_passkeys": has_passkeys,
"passkey_count": passkey_count,
"passwordless_enabled": passwordless_enabled,
+ "allow_passwordless": config.allow_passwordless if config else False,
}
diff --git a/frontend/src/components/layout/LockOverlay.tsx b/frontend/src/components/layout/LockOverlay.tsx
index 901b50d..9f39013 100644
--- a/frontend/src/components/layout/LockOverlay.tsx
+++ b/frontend/src/components/layout/LockOverlay.tsx
@@ -39,14 +39,6 @@ export default function LockOverlay() {
}
}, [isLocked, showPasswordForm]);
- // Auto-trigger passkey unlock when passwordless mode is enabled
- useEffect(() => {
- if (isLocked && passwordlessEnabled && supportsWebAuthn && !isPasskeyUnlocking) {
- handlePasskeyUnlock();
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [isLocked, passwordlessEnabled]);
-
if (!isLocked) return null;
const preferredName = settings?.preferred_name;
diff --git a/frontend/src/components/settings/PasskeySection.tsx b/frontend/src/components/settings/PasskeySection.tsx
index e1f7010..065178f 100644
--- a/frontend/src/components/settings/PasskeySection.tsx
+++ b/frontend/src/components/settings/PasskeySection.tsx
@@ -137,7 +137,7 @@ function PasskeyDeleteButton({ credential, onDelete, isDeleting }: DeleteConfirm
export default function PasskeySection() {
const queryClient = useQueryClient();
- const { passwordlessEnabled, passkeyCount } = useAuth();
+ const { passwordlessEnabled, passkeyCount, allowPasswordless } = useAuth();
// Registration state
const [registerDialogOpen, setRegisterDialogOpen] = useState(false);
@@ -376,39 +376,41 @@ export default function PasskeySection() {
{hasPasskeys ? 'Add another passkey' : 'Add a passkey'}
- {/* Passwordless login section */}
-
- Skip the password prompt and unlock the app using a passkey only. -
- {passkeyCount < 2 && ( -- Requires at least 2 registered passkeys as a fallback. + {(allowPasswordless || passwordlessEnabled) && ( +
+ Skip the password prompt and unlock the app using a passkey only.
- )} + {passkeyCount < 2 && !passwordlessEnabled && ( ++ Requires at least 2 registered passkeys as a fallback. +
+ )} +