OAuth Authorize App

Authorize Linear

Linear by Linear Orbit, Inc. wants to access your Beste account.

This will allow Linear to:

  • Read your profile

    Name, email, and profile picture.

  • Access your projects

    View and update issues in your workspace.

  • Send notifications

    Notify you about activity on your behalf.

You can revoke access at any time from your account settings.

About this block

OAuth Authorize AppPRO

Full-height OAuth consent screen showing the requesting app, the permissions it needs as a scope list, and authorize and cancel actions. Perfect for third-party app authorization and developer platform connect flows.

Auth19: OAuth Authorize App

Full-height OAuth consent screen: a centered app icon and heading over a bordered card that lists the requested permission scopes as a checkmarked list, followed by an authorize and a cancel action. Built for third-party app connect and developer platform authorization flows.

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/auth19?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/auth19.tsx and the button shadcn/ui primitive it's built on.

Quick start

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

tsx
import { Auth19, auth19Demo } from "@/components/beste/block/auth19";

export default function AuthorizePage() {
  return <Auth19 {...auth19Demo} />;
}

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

tsx
import { Puzzle } from "lucide-react";
import { Auth19 } from "@/components/beste/block/auth19";

export default function AuthorizePage() {
  return (
    <Auth19
      icon={<Puzzle className="size-7" />}
      heading="Authorize Linear"
      description="Linear by Linear Orbit, Inc. wants to access your Beste account."
      scopes={[
        { title: "Read your profile", description: "Name, email, and profile picture." },
        { title: "Access your projects", description: "View and update issues in your workspace." },
      ]}
      authorizeButton={{ label: "Authorize", href: "/oauth/authorize" }}
      cancelButton={{ label: "Cancel", href: "/oauth/cancel" }}
      labels={{ scopesHeading: "This will allow Linear to:" }}
    />
  );
}

Props

PropTypeDefaultDescription
iconReact.ReactNode–Icon rendered in a muted square above the heading
headingstring–Screen title, e.g. "Authorize [App]"
descriptionstring–Subtext naming the requesting app
scopesScope[][]Permission list shown with checkmark bullets
authorizeButton{ label: string; href: string }–Primary action; hidden entirely when not set
cancelButton{ label: string; href: string }–Ghost action below the primary button; hidden entirely when not set
labelsobject{}Card heading and footer copy, see below
classNamestring–Extra classes for the outer <section>
ts
type Scope = { title: string; description?: string };

type Auth19Labels = { scopesHeading?: string; footer?: string };

Behavior notes

  • Both authorizeButton and cancelButton render as asChild next/link anchors, not real OAuth redirect or grant calls; wiring the actual consent exchange is left to the integrator.
  • The scopes list renders only when scopes.length > 0; each row is skipped independently for its description line if that field is omitted.
  • labels.scopesHeading (the small caption above the scope list) and labels.footer (the "revoke access" line under the card) each render only when explicitly set, so both can be omitted to simplify the screen.
  • The icon slot is a fixed size-14 rounded-md square with a muted background, distinct from the circular icon treatment used in auth20/auth23/auth27/auth28.

More Auth blocks

View all Auth
PRO

auth27

Sign-In Error

PRO

auth46

Confirm It's You

PRO

auth16

Team Invitation Accept

Get Pro access