Skip to content

feat(portal): passkeys as a second factor - #90

Merged
kipavy merged 1 commit into
mainfrom
feat/portal-passkeys
Oct 11, 2026
Merged

kipavy merged 1 commit into
mainfrom
feat/portal-passkeys

Conversation

@kipavy

@kipavy kipavy commented Oct 11, 2026

Copy link
Copy Markdown
Contributor

Portal side of VoltiusApp/server#106, passkeys as a second factor. Safe to merge before the server PR: against a server without passkeys the button never shows and /2fa/passkey says the request cannot be checked.

What changes

  • /2fa/passkey, the page the app opens in the browser to create or use a passkey. It reads a one-time handle from the URL fragment, removes it from the address bar, names the account and what was asked for, and after the passkey prompt sends the browser to the address the server returns (the app's listener on 127.0.0.1, or a voltius:// link).
  • Sign-in: "Use a passkey" above the code field when the account has one. An account without an authenticator gets the passkey button and a recovery code field.
  • Change password: same button where a second factor is asked for.
  • Sign-in, sign-up and the new page share one shell (AuthShell) instead of three copies.

No passkey management here: adding and removing is done in the app.

Checked

Chromium with a virtual authenticator, portal dev server against the server branch: create a passkey through the page, sign in on the portal with it, finish an app-style sign-in through the page, change the password with it, stale handle, done state. Typecheck passes. Not checked in Safari or Firefox.

Adds the page the app opens in the browser to create or use a passkey
(/2fa/passkey), a passkey button at the portal's own sign-in, and the same
button where a password change asks for a second factor.

The page takes a one-time handle from the URL fragment, drops it from the
address bar, shows the account and what was asked for, and sends the browser
on to the address the server names once the passkey has answered.

Sign-in, sign-up and the new page now share one page shell.
@vercel

vercel Bot commented Oct 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
voltius Ready Ready Preview Oct 11, 2026 7:01pm UTC
voltius-portal Ready Ready Preview Oct 11, 2026 7:01pm UTC

@kipavy
kipavy merged commit 7eedda7 into main Oct 11, 2026
4 checks passed

This branch was successfully deployed

2 active deployments
Preview – voltius-portal — d726d2fd Deployed Oct 11, 2026 by vercel[bot]
Preview – voltius — d726d2fd Deployed Oct 11, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant