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:
May 14, 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
How to migrate from Passage to Authsignal
Passage by 1Password is shutting down on January 16, 2026. This guide explains how to migrate your users from Passage to Authsignal without any disruption, including data mapping, passkey credential import, and migration of verified email and phone authenticators.
How to actually stop credential stuffing in 2025
Credential stuffing attacks are evolving fast, are your defenses keeping up? Discover how adaptive MFA, behavioral biometrics, and passkeys can stop attacks in 2025. Learn what actually works today.
Looking for a Passage alternative? Why teams are migrating to Authsignal
Passage by 1Password is shutting down in January 2026. Learn how to migrate to Authsignal, a future-ready authentication platform with passkeys, adaptive MFA, and no-code orchestration for modern identity security.

Secure your customers’ accounts today with Authsignal