Deleting passkeys from your backend and the user's local device
Deleting a passkey from your vault
Section titled “Deleting a passkey from your vault”Use the @passlock/server library to remove a passkey from your vault:
import { Passlock, isNotFoundError } from "@passlock/server";
// get these from your development tenancy settingsconst tenancyId = "myTenancyId";const apiKey = "myApiKey";const passlock = new Passlock({ tenancyId, apiKey });
const result = await passlock.deletePasskey({ passkeyId });
if (result.success) { // success} else if (isNotFoundError(result.error)) { // passkey not found in the vault} else { console.error(result.error.message);}import { Passlock, isNotFoundError } from "@passlock/server/unsafe";
// get these from your development tenancy settingsconst tenancyId = "myTenancyId";const apiKey = "myApiKey";const passlock = new Passlock({ tenancyId, apiKey });
try { const result = await passlock.deletePasskey({ passkeyId });} catch (e) { if (isNotFoundError(e)) { // passkey not found in the vault }}import { deletePasskey, isNotFoundError} from "@passlock/server";
// get these from your development tenancy settingsconst tenancyId = "myTenancyId";const apiKey = "myApiKey";
const result = await deletePasskey({ passkeyId }, { tenancyId, apiKey });
if (result.success) { // success} else if (isNotFoundError(result.error)) { // passkey not found in the vault} else { console.error(result.error.message);}import { deletePasskey, isNotFoundError } from "@passlock/server/unsafe";
// get these from your development tenancy settingsconst tenancyId = "myTenancyId";const apiKey = "myApiKey";
try { const result = await deletePasskey({ passkeyId }, { tenancyId, apiKey });} catch (e) { if (isNotFoundError(e)) { // passkey not found in the vault }}
Choose your code style
Deleting a passkey from a device
Section titled “Deleting a passkey from a device”Use the @passlock/browser library to remove a passkey from a user’s device:
import { Passlock } from "@passlock/browser";
// get this from your development tenancy settingsconst tenancyId = "myTenancyId";const passkeyId = "myPasskeyId";const passlock = new Passlock({ tenancyId });
const result = await passlock.deletePasskey({ passkeyId });
if (result.success) { // happy days} else { console.log(result.error.message);}import { Passlock, isDeleteError } from "@passlock/browser/unsafe";
// get this from your development tenancy settingsconst tenancyId = "myTenancyId";const passkeyId = "myPasskeyId";const passlock = new Passlock({ tenancyId });
try { const result = await passlock.deletePasskey({ passkeyId });} catch (e) { if (isDeleteError(e)) { console.log(e.message); }}import { deletePasskey } from "@passlock/browser";
// get this from your development tenancy settingsconst tenancyId = "myTenancyId";const passkeyId = "myPasskeyId";
const result = await deletePasskey({ passkeyId }, { tenancyId });
if (result.success) { // happy days} else { console.log(result.error.message);}import { deletePasskey, isDeleteError } from "@passlock/browser/unsafe";
// get this from your development tenancy settingsconst tenancyId = "myTenancyId";const passkeyId = "myPasskeyId";
try { const result = await deletePasskey({ passkeyId }, { tenancyId });} catch (e) { if (isDeleteError(e)) { console.log(e.message); }}
Choose your code style
Backend and frontend deletion
Section titled “Backend and frontend deletion”You can first delete a passkey from your vault, then pass the result to your frontend code…
import { Passlock } from "@passlock/server";
const passlock = new Passlock({ tenancyId, apiKey });const result = await passlock.deletePasskey({ passkeyId });
if (result.success) { // send the DeletedPasskey payload to your frontend res.send(JSON.stringify(result.value));}import { Passlock } from "@passlock/server/unsafe";
const passlock = new Passlock({ tenancyId, apiKey });const result = await passlock.deletePasskey({ passkeyId });
// send the DeletedPasskey payload to your frontendres.send(JSON.stringify(result)); import { deletePasskey } from "@passlock/server";
const result = await deletePasskey({ passkeyId }, { tenancyId, apiKey });
if (result.success) { // send the DeletedPasskey payload to your frontend res.send(JSON.stringify(result.value)); }import { deletePasskey } from "@passlock/server/unsafe";
const result = await deletePasskey({ passkeyId }, { tenancyId, apiKey });
// send the DeletedPasskey payload to your frontendres.send(JSON.stringify(result));
Choose your code style
import { Passlock } from "@passlock/browser";
const passlock = new Passlock({ tenancyId });
// result of calling deletePasskey in your backendconst backendDeletionResult = { deleted: { credentialId: "...", userId: "...", rpId: "..." },};
const result = await passlock.deletePasskey(backendDeletionResult.deleted);
if (!result.success) { console.error(result.error.message);}import { Passlock } from "@passlock/browser/unsafe";
const passlock = new Passlock({ tenancyId });
// result of calling deletePasskey in your backendconst backendDeletionResult = { deleted: { credentialId: "...", userId: "...", rpId: "..." },};
try { const result = await passlock.deletePasskey(backendDeletionResult.deleted);} catch (e) { ... }import { deletePasskey } from "@passlock/browser";
// result of calling deletePasskey in your backendconst backendDeletionResult = { deleted: { credentialId: "...", userId: "...", rpId: "..." },};
const result = await deletePasskey(backendDeletionResult.deleted);
if (!result.success) { console.error(result.error.message);}import { deletePasskey } from "@passlock/browser/unsafe";
// result of calling deletePasskey in your backendconst backendDeletionResult = { deleted: { credentialId: "...", userId: "...", rpId: "..." },};
try { const result = await deletePasskey(backendDeletionResult.deleted);} catch (e) { ... }
Choose your code style
Handling an OrphanedPasskeyError
Section titled “Handling an OrphanedPasskeyError”During client side authentication, if you receive an OrphanedPasskeyError, pass that error into the deletePasskey function:
import { Passlock, isOrphanedPasskeyError,} from "@passlock/browser";
const passlock = new Passlock({ tenancyId });const result = await passlock.authenticatePasskey(options);
if (result.failure && isOrphanedPasskeyError(result.error)) { if (confirm("Passkey invalid, remove it?")) { const deletion = await passlock.deletePasskey(result.error);
if (!deletion.success) { console.error(deletion.error.message); } }} else if (!result.success) { console.error(result.error.message);}import { Passlock, isOrphanedPasskeyError,} from "@passlock/browser/unsafe";
const passlock = new Passlock({ tenancyId });
try { const result = await passlock.authenticatePasskey(options);} catch (e) { if (isOrphanedPasskeyError(e)) { if (confirm("Passkey invalid, remove it?")) { await passlock.deletePasskey(e); } }}import { authenticatePasskey, deletePasskey, isOrphanedPasskeyError,} from "@passlock/browser";
const result = await authenticatePasskey(options, { tenancyId });
if (result.failure && isOrphanedPasskeyError(result.error)) { if (confirm("Passkey invalid, remove it?")) { const deletion = await deletePasskey(result.error);
if (!deletion.success) { console.error(deletion.error.message); } }} else if (!result.success) { console.error(result.error.message);}import { authenticatePasskey, deletePasskey, isOrphanedPasskeyError,} from "@passlock/browser/unsafe";
try { const result = await authenticatePasskey(options, { tenancyId });} catch (e) { if (isOrphanedPasskeyError(e)) { if (confirm("Passkey invalid, remove it?")) { await deletePasskey(e); } }}
Choose your code style