Passkeys: one-time invite codes to enrol another device
build-container / build (push) Successful in 2m14s
build-container / build (push) Successful in 2m14s
A signed-in device creates a short-lived, single-use code in Settings
("Invite a device"); the new device enters it on the sign-in page to create
its own passkey. Codes are throttled like other secrets and cannot be used
by signed-out clients to create more codes.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e8b46bb3aa
commit
6ec98d2527
4 files changed
+58
-12
No files matched your search
+14
-1
@@ -14,7 +14,20 @@ async function init() {
|
||||
$('#sub').textContent = 'Sign in with your passkey';
|
||||
$('#ui').innerHTML = '<button class="btn" id="go">Sign in with passkey</button>';
|
||||
$('#go').onclick = signIn;
|
||||
signIn(); // prompt straight away; the button is there if it's dismissed
|
||||
$('#ui').insertAdjacentHTML('beforeend', '<p style="margin-top:18px"><a href="#" id="inv" style="color:var(--accent)">New device? Use an invite code</a></p>');
|
||||
$('#inv').onclick = e => {
|
||||
e.preventDefault(); $('#err').textContent = ''; $('#sub').textContent = 'Add this device';
|
||||
$('#ui').innerHTML = `<form id="f"><p class="sub">On a device that is already signed in, open Settings and tap <b>Invite a device</b>.</p>
|
||||
<label for="ic">Invite code</label><input type="text" id="ic" placeholder="ABCD-2345" autocomplete="off" autocapitalize="characters" required>
|
||||
<label for="nm">Name this passkey</label><input type="text" id="nm" value="${/iPad|iPhone/.test(navigator.userAgent) ? 'iPhone/iPad' : 'This device'}" autocomplete="off">
|
||||
<div class="bar"><button class="btn">Create passkey</button></div><p style="text-align:center"><a href="/login" style="color:var(--accent)">Back to sign in</a></p></form>`;
|
||||
$('#f').onsubmit = async ev => {
|
||||
ev.preventDefault(); $('#err').textContent = '';
|
||||
try { await passkeyRegister('', $('#nm').value.trim() || 'Passkey', $('#ic').value.trim()); location.replace('/'); } catch (err) { fail(err); }
|
||||
};
|
||||
};
|
||||
// Offer the passkey straight away unless the user came here to use an invite code.
|
||||
signIn();
|
||||
} else {
|
||||
$('#sub').textContent = 'First-time setup: create a passkey for this device';
|
||||
$('#ui').innerHTML = `<form id="f"><label for="sc">Setup code (from the server log or HUB_SETUP_CODE)</label>
|
||||
|
||||
Reference in new issue
Block a user