payload-auth-plugin
Version:
Authentication plugin for Payload CMS
43 lines (40 loc) • 1.34 kB
text/typescript
import { browserSupportsWebAuthn } from "@simplewebauthn/browser"
import { registration } from "./registration.js"
import { authentication } from "./authentication.js"
//NOTE: EXPERIMENTAL
export const init = async () => {
if (!browserSupportsWebAuthn()) {
console.log(
"It seems this browser does not support WebAuthn/Passkey. Reach out to the plugin author",
)
return
}
//TODO: Need a better way to implement email vaildation
const emailInput = document.getElementById("field-email") as HTMLInputElement
const emailValue = emailInput.value
if (!emailValue) {
alert("Enter your email")
return
}
const response = await fetch("/api/admin/passkey/init", {
method: "POST",
body: JSON.stringify({ data: { email: emailInput.value } }),
})
if (response.ok) {
const { data } = await response.json()
if (Object.entries(data).length === 0) {
return await registration(emailInput.value)
}
return await authentication(
{
backedUp: data["passkey"]["backedUp"],
counter: data["passkey"]["counter"],
credentialId: data["passkey"]["credentialId"],
deviceType: data["passkey"]["deviceType"],
publicKey: data["passkey"]["publicKey"],
transports: data["passkey"]["transports"],
},
emailInput.value,
)
}
}