From 842a516ce6dcd780af71b0054830cf31be89399b Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Fri, 15 May 2026 13:36:53 +0200 Subject: [PATCH] Vereinfachung der Passkey-Registrierung durch Entfernen der bevorzugten Authentifikator-Typen und Anpassung der Fehlerbehandlung. --- pages/mitgliederbereich/profil.vue | 49 ++++-------------------------- 1 file changed, 6 insertions(+), 43 deletions(-) diff --git a/pages/mitgliederbereich/profil.vue b/pages/mitgliederbereich/profil.vue index 4f8b233..43441ec 100644 --- a/pages/mitgliederbereich/profil.vue +++ b/pages/mitgliederbereich/profil.vue @@ -400,50 +400,13 @@ const addPasskey = async () => { const name = window.prompt('Name für den Passkey (z.B. "iPhone", "Laptop"):', 'Passkey') || 'Passkey' const mod = await import('@simplewebauthn/browser') - const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent || '' : '' - const isFirefox = /Firefox\//i.test(userAgent) +// Kein preferredAuthenticatorType setzen → kein authenticatorAttachment gesetzt + // → Browser (inkl. Firefox) wählt selbst: interner Passkey-Store, Smartphone oder Security Key + // Firefox speichert den Passkey dann intern wie ein Passwort (kein Hardware-Key nötig) + const res = await $fetch('/api/auth/passkeys/registration-options', { method: 'POST' }) - let platformAvailable = true - if (typeof mod.platformAuthenticatorIsAvailable === 'function') { - try { - platformAvailable = await mod.platformAuthenticatorIsAvailable() - } catch { - platformAvailable = true - } - } - - const preferenceChain = [] - if (isFirefox) { - // Firefox kann unter Linux Passkeys browserseitig verwalten, auch wenn kein - // klassischer Platform-Authenticator erkannt wird. - preferenceChain.push('localDevice', 'remoteDevice') - } else if (!platformAvailable) { - preferenceChain.push('remoteDevice', 'localDevice') - } else { - preferenceChain.push('localDevice') - } - - let credential = null - let lastError = null - - for (const preferredAuthenticatorType of preferenceChain) { - try { - const res = await $fetch('/api/auth/passkeys/registration-options', { - method: 'POST', - body: { preferredAuthenticatorType } - }) - - // @simplewebauthn/browser v13+ erwartet { optionsJSON: options } - credential = await mod.startRegistration({ optionsJSON: res.options }) - break - } catch (err) { - lastError = err - } - } - - if (!credential) { - throw lastError || new Error('Passkey konnte nicht erstellt werden.') - } + // @simplewebauthn/browser v13+ erwartet { optionsJSON: options } + const credential = await mod.startRegistration({ optionsJSON: res.options }) await $fetch('/api/auth/passkeys/register', { method: 'POST',