feat(auth): add trusted-device 30-day 2FA skip (frontend)

Adds a "Trust this device for 30 days" checkbox to the 2FA challenge step,
and a "Trusted devices" section to the 2FA settings card: list devices with
a "this device" badge, per-row revoke, and a confirm-gated "sign out all
other trusted devices" action. Both flows are opt-in and additive -- default
unchecked, so nothing changes for a user who never uses them.
This commit is contained in:
cesnimda
2026-07-13 01:02:43 +02:00
parent b914630657
commit 0ca2f2b261
4 changed files with 146 additions and 6 deletions
+22
View File
@@ -345,6 +345,17 @@ export const translations = {
twoFactorEnabledSuccess: "Two-factor authentication enabled.",
twoFactorDisabledSuccess: "Two-factor authentication disabled.",
twoFactorRegenerateSuccess: "Recovery codes regenerated.",
twoFactorTrustDevice: "Trust this device for 30 days",
twoFactorTrustedDevicesTitle: "Trusted devices",
twoFactorTrustedDevicesEmpty: "No trusted devices yet.",
twoFactorTrustedDeviceUnknown: "Unknown device",
twoFactorTrustedDeviceCurrent: "This device",
twoFactorTrustedDeviceMeta: "Last used {lastSeen} · Expires {expires}",
twoFactorRevokeDevice: "Revoke",
twoFactorRevokeAllDevices: "Sign out all other trusted devices",
twoFactorTrustedDevicesRevokedAll: "All trusted devices have been signed out.",
twoFactorRevokeAllConfirmTitle: "Sign out all trusted devices?",
twoFactorRevokeAllConfirmBody: "You'll be asked for a 2FA code the next time you sign in on any device, including this one.",
cropDialogTitle: "Crop profile image",
cropDialogBody: "Position and zoom your image. The saved avatar will be exported as a 512×512 square.",
cropDialogZoom: "Zoom",
@@ -1362,6 +1373,17 @@ export const translations = {
twoFactorEnabledSuccess: "Topunkts autentisering aktivert.",
twoFactorDisabledSuccess: "Topunkts autentisering deaktivert.",
twoFactorRegenerateSuccess: "Gjenopprettingskoder generert på nytt.",
twoFactorTrustDevice: "Stol på denne enheten i 30 dager",
twoFactorTrustedDevicesTitle: "Betrodde enheter",
twoFactorTrustedDevicesEmpty: "Ingen betrodde enheter ennå.",
twoFactorTrustedDeviceUnknown: "Ukjent enhet",
twoFactorTrustedDeviceCurrent: "Denne enheten",
twoFactorTrustedDeviceMeta: "Sist brukt {lastSeen} · Utløper {expires}",
twoFactorRevokeDevice: "Fjern tilgang",
twoFactorRevokeAllDevices: "Logg ut alle andre betrodde enheter",
twoFactorTrustedDevicesRevokedAll: "Alle betrodde enheter er logget ut.",
twoFactorRevokeAllConfirmTitle: "Logg ut alle betrodde enheter?",
twoFactorRevokeAllConfirmBody: "Du vil bli bedt om en 2FA-kode neste gang du logger inn på en enhet, inkludert denne.",
cropDialogTitle: "Beskjær profilbilde",
cropDialogBody: "Plasser og zoom bildet. Det lagrede avataren eksporteres som en kvadratisk 512×512-fil.",
cropDialogZoom: "Zoom",