diff --git a/app.js b/app.js
index f564f01..004be16 100644
--- a/app.js
+++ b/app.js
@@ -352,6 +352,10 @@ router.on('/login', async () => {
+
`;
const _blPass = document.getElementById('bl-pass');
@@ -372,6 +376,29 @@ router.on('/login', async () => {
showToast(err.message, 'error');
}
});
+
+ // WebAuthn / Passkey (Fingerabdruck) — nur wenn der Browser es kann.
+ // Der Passkey gilt domainweit (RP awl.data-it-solution.de): ein auf dem
+ // Handy registrierter Passkey loggt hier ohne Benutzername/Passwort ein.
+ const _pk = document.getElementById('bl-passkey');
+ if (_pk && window.awlauthWebAuthn && awlauthWebAuthn.isSupported()) {
+ _pk.style.display = 'flex';
+ _pk.addEventListener('click', async () => {
+ _pk.disabled = true;
+ try {
+ const res = await awlauthWebAuthn.login();
+ // Profil wie beim Passwort-Login ablegen (Einstellungen liest idb 'user'),
+ // sonst zeigt der Konto-Block nach reinem Passkey-Login 'Unbekannt'.
+ if (res && res.user) { await idb.set('user', res.user); }
+ // awl_sso ist gesetzt -> Orders-Route rendert und faehrt ensureAuth()/verify.php
+ showToast('Erfolgreich angemeldet');
+ router.go('#/orders');
+ } catch (err) {
+ _pk.disabled = false;
+ showToast(err && err.message ? err.message : 'Anmeldung fehlgeschlagen', 'error');
+ }
+ });
+ }
});
router.on('/today', async () => {
diff --git a/index.php b/index.php
index 1607d5f..b457e9b 100644
--- a/index.php
+++ b/index.php
@@ -83,6 +83,9 @@ if (typeof pdfjs !== 'undefined') {
+
+
+