Skip to content

Profile — Security

The Profile ▸ Security page is where every user controls how they sign in. Three sections cover the full lifecycle of credential management: password change, two-factor enrolment, and per-device session control.

Profile Security — Acme Financial Group demo tenant

Standard PageHeader with the title Security and a one-line description. Lives at the top of the right-hand content panel; the Profile left-nav provides the Profile / Security / Notifications sub-navigation.

A three-field form:

  • Current password (required to authorize the change)
  • New password (must satisfy the strength rules below)
  • Confirm new password

Strength rules (Zod schema):

  • ≥ 12 characters
  • ≥ 1 uppercase letter
  • ≥ 1 number
  • ≥ 1 symbol

On successful change:

  1. Credential is updated server-side
  2. Every other active session is revoked (security default)
  3. The current session stays signed in
  4. The change is logged in the user’s audit feed

If your tenant is configured to use SSO for primary sign-in, the password fields are hidden — credential management lives in the identity provider.

The TOTP-based 2FA flow:

  1. Generate — server emits a TOTP secret + QR code
  2. Scan — user adds the secret to their authenticator app
  3. Verify — user types a fresh code; server confirms the binding
  4. Save recovery codes — eight one-time codes shown once for offline storage
  5. Enabled — 2FA is active; subsequent sign-ins require a code

Once enabled, the section flips to display:

  • A status pill (Enabled / Disabled)
  • The enrolment timestamp
  • Action buttons: Regenerate recovery codes, Disable 2FA

If the org has enforced 2FA under Settings ▸ Compliance, the Disable button is hidden — only an admin can override the enforcement flag, and disabling 2FA on a self-enforced tenant breaks the policy.

A live list of sessions, identical in shape to the Profile ▸ General ▸ Sessions tab — both views are projections of the same sessions table.

Per-row data:

  • Device name (parsed from User-Agent)
  • IP address
  • Best-effort geocoded city and country
  • Last-active timestamp
  • A Current badge on the session you’re using right now

Per-row action: Revoke. Top-of-section action: Sign out everywhere else when 2+ sessions exist.

This page is per-user — every member sees only their own security settings. There is no admin override here; admin tooling for managing other users’ sessions and 2FA lives under Settings ▸ Team ▸ <user>.

Several controls on this page are gated by org-level policy configured under Settings ▸ Compliance (admin-only):

PolicyEffect on this page
2FA enforcedDisable 2FA button hidden
Password rotation intervalOptional inline reminder banner when due
SSO requiredPassword section hidden; sign-in via IdP

Every action on this page emits an audit event:

  • auth.password_changed
  • auth.2fa_enabled
  • auth.2fa_disabled
  • auth.2fa_recovery_codes_regenerated
  • auth.session_revoked

Events surface in the user’s own Profile ▸ Security ▸ Activity tab and in the org-wide Settings ▸ Audit Log.

SymptomMost likely causeFix
Password rejected on saveDoesn’t satisfy strength rulesThe form lists the failing rule below the field
2FA QR code expiredTab idle too longClick Regenerate to get a fresh secret
Authenticator code rejectedDevice clock drift > 30 sVerify system time on the phone; some apps offer manual sync
Locked out — lost device + lost recovery codesSelf-recovery exhaustedContact an org admin to reset 2FA
Session list missing a deviceUA fingerprint mismatchSign out and back in on that device
New password keeps signing me outWorking as designed — global revokeRe-sign in once after a password change