Guide
Passkeys and platform authenticators (Touch ID, Face ID, Windows Hello, security keys) let users sign in without typing a TOTP code. This deployment reads oneACCESS_WEBAUTHN_SECRET JSON value; it may contain one credential or several (see byHost / credentials below) so each hostname you use can have its own passkey.
You can run WebAuthn-only flows when the deployment is configured for it, or keep TOTP as a backup—see TOTP setup and Environment variables.
rpId must equal the host users see in the address bar for that deployment (no scheme, no path). Use localhost for local HTTP dev; production must be served over HTTPS with a hostname that exactly matches the registered credential. If you open the same deployment under several hostnames (e.g. localhost and vercel-2fa.vercel.app), register once per host and store them together using the byHost shape in ACCESS_WEBAUTHN_SECRET — see Environment variables.
ACCESS_USERNAMEAfter registration, copy the exported JSON object into ACCESS_WEBAUTHN_SECRET as a single line. It includes Base64 fields such as credentialID and publicKey plus rpId and username for sanity checks.
On Vercel, paste via the dashboard or CLI; escape quotes if your shell requires it. Treat this blob like a password—anyone with it can mint assertions if they also know your password and can reach the login page.