Authsignal secures millions of passkey transactions out of our hosted Sydney region.

Authsignal secures millions of passkey transactions out of our hosted Sydney region.

Join us today!
Blog
/
Current article

Passwordless React UI Components: Add Passkeys to Your Client-Side App

Last Updated:
March 3, 2025
Ben Rolfe
Passwordless React UI Components: Add Passkeys to Your Client-Side App
AWS Partner
Authsignal is an AWS-certified partner and has passed the Well-Architected Review Framework (WAFR) for its Cognito integration.
AWS Marketplace

Add authentication flows into your react app or website using Authsignal’s UI components with the React SDK. Fast-track passkeys and MFA implementation for your client-side app. Authsignal's fast, easy-to-integrate components enable developers to create bespoke authentication user experiences without starting from scratch, giving you the flexibility and control you need to build your client-side authentication flows.

The Authsignal React SDK builds on top of the Web SDK by providing UI components that can be added to your React app.

An example of the UI components in a checkout flow.

AuthsignalProvider component

The AuthsignalProvider component allows you to use the useAuthsignal hook. Render the AuthsignalProvider component at the root of your application so that it is available everywhere you need it.

import { AuthsignalProvider } from "@authsignal/react";

import { Checkout } from "./Checkout";

export function App() {
  return (
    <AuthsignalProvider tenantId="{{TENANT_ID}}" baseUrl="{{BASE_URL}}">
      <Checkout />
    </AuthsignalProvider>
  );
}

useAuthsignal hook

The useAuthsignal hook returns two functions, startChallenge, and startChallengeAsync, that you can use to trigger the authentication flow.

Both functions require a token to be passed as an argument. Your server should return the token after tracking an action.

startChallenge

The startChallenge function triggers the authentication flow.

import { useAuthsignal } from "@authsignal/react";

export function Checkout() {
  const { startChallenge } = useAuthsignal();

  const handlePayment = async () => {
    const response = await fetch("/api/payment", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
    });

    const data = await response.json();

    if (data.token) {
      startChallenge({
        token: data.token,
        onChallengeSuccess: ({ token }) => {
          // Challenge was successful
          // Send the token to your server to validate the challenge
        },
        onCancel: () => {
          // User cancelled the challenge
        },
        onTokenExpired: () => {
          // Token expired
        },
      });
    }
  };

  return (
    <div>
      <button type="button" onClick={handlePayment}>
        Pay
      </button>
    </div>
  );
}

Learn more by visiting the docs.

Try out our passkey demo
Passkey Demo
Have a question?
Talk to an expert
You might also like
Embedding Passkeys into Your App Workflows: Why Authsignal's Approach Stands Out
Discover how to embed passkeys into your app workflows. Learn why Authsignal’s non-IdP approach enables seamless, risk-based authentication without the need for identity system overhauls—saving time and reducing friction.
Twilio Verify vs Authsignal: The Twilio Alternative That Does More With Less Dev Effort
Looking for a Twilio Verify alternative? Discover how Authsignal provides a complete step-up authentication solution with passkeys, adaptive MFA, and powerful no-code policy tools—all with minimal engineering effort.
How to Add Passkeys to Duende IdentityServer with Authsignal
Learn how to enhance your Duende IdentityServer setup with passkey authentication using Authsignal. Follow this step-by-step guide to enable secure, passwordless logins with biometric verification.

Secure your customers’ accounts today with Authsignal.