Implement Passkey registration

- Create Identity credentials
- Add management UI and registration flow
This commit is contained in:
Stanko K.R.
2026-02-13 16:58:06 +01:00
parent 4bb0a2929c
commit 6c58fd9bdd
16 changed files with 330 additions and 19 deletions
@@ -0,0 +1,36 @@
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
connect() {
if (window.PublicKeyCredential?.isConditionalMediationAvailable) {
this.attemptConditionalMediation()
}
}
disconnect() {
this.abortController?.abort()
}
async attemptConditionalMediation() {
if (!await PublicKeyCredential.isConditionalMediationAvailable()) return
this.abortController = new AbortController()
try {
const credential = await navigator.credentials.get({
publicKey: {
challenge: crypto.getRandomValues(new Uint8Array(32)),
rpId: window.location.hostname
},
mediation: "conditional",
signal: this.abortController.signal
})
console.log("Passkey selected:", credential)
} catch (error) {
if (error.name !== "AbortError") {
console.error("Passkey error:", error)
}
}
}
}