Human Verification

Verify you're human

Complete the quick check below to continue.

About this block

Human VerificationPRO

Full-height CAPTCHA-style check with an animated I'm-not-a-robot control that runs through verifying and verified states and unlocks the continue button. Perfect for bot protection before sign-in.

Auth45: Human Verification

A full-height, centered CAPTCHA-style verification screen: an optional heading and description sit above a card-styled "I'm not a robot" button that, on click, cycles through an idle checkbox, a spinning verifying state, and a green-checkmark verified state, at which point the previously disabled continue button becomes an active link.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/auth45?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/auth45?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/auth45.tsx, plus the button shadcn/ui primitive it uses for the continue button.

Quick start

The installed file exports auth45Demo alongside the block: the exact props behind the preview above. Spread it to get a working verification screen in one line.

tsx
import { Auth45, auth45Demo } from "@/components/beste/block/auth45";

export default function Page() {
  return <Auth45 {...auth45Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Auth45 } from "@/components/beste/block/auth45";

export default function Page() {
  return (
    <Auth45
      heading="Verify you're human"
      description="Complete the quick check below to continue."
      labels={{
        checkbox: "I'm not a robot",
        verifying: "Verifying…",
        verified: "Verified",
        brand: "Beste Shield",
      }}
      submitButton={{ label: "Continue", href: "/dashboard" }}
    />
  );
}

Props

PropTypeDefaultDescription
headingstring–Top heading; omitted from the DOM when falsy
descriptionstring–Sub-heading paragraph; omitted from the DOM when falsy
labelsLabels{}Text for the checkbox control and brand tag across states
submitButton{ label: string; href: string }–Continue button; only rendered when provided
classNamestring–Extra classes for the outer <section>
ts
type Labels = {
  checkbox?: string;
  verifying?: string;
  verified?: string;
  brand?: string;
};

Behavior notes

  • Verification is faked entirely on the client: clicking the control sets status to verifying, then a setTimeout of 1200ms flips it to verified; there is no callback, promise, or server hook, so real bot-checking is left to the integrator.
  • The control is a plain <button>, not a checkbox input, and it is disabled once status leaves idle, so the flow only runs forward once and cannot be reset without remounting.
  • The status state lives entirely inside the component with no onChange or onVerified prop, so the parent has no way to observe when verification completes.
  • The visible label swaps by status: labels.verified when verified, labels.verifying while verifying, otherwise labels.checkbox; each is optional and renders nothing when unset.
  • The leading icon changes by status: a spinning Loader2 while verifying, a green Check when verified, and an empty bordered square when idle.
  • The brand tag (ShieldCheck icon plus labels.brand) on the right of the control only renders when labels.brand is set.
  • The continue Button is always disabled until status is verified; only then does it gain asChild and wrap a next/link pointing at submitButton.href, so before verification it is an inert button with no link.

More Auth blocks

View all Auth
FREE

auth3

Email Verification Code

PRO

auth46

Confirm It's You

PRO

auth10

Face ID Sign In

Get Pro access