OAuth Provider
better-auth-ui/oauth-providerFreeComponent
OAuth Provider plugin: authorization consent screen, prompt=create sign-up continuation, account chooser, and a connected applications security card for Better Auth authorization requests.
Live preview
live · rendered by the registry
Rendered by better-auth-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://better-auth-ui.com/r/oauth-provider.jsonSource
1"use client"23import {4 type OAuthAuthorizationRequest,5 parseOAuthAuthorizationRequest,6 resolveOAuthScopeMetadata,7 sanitizeOAuthClientUrl8} from "@better-auth-ui/core/plugins"9import {10 type OAuthProviderAuthClient,11 useAuth,12 useAuthPlugin,13 useOAuthConsent,14 usePublicOAuthClient,15 useSession16} from "@better-auth-ui/react"17import { Check, ShieldCheck } from "lucide-react"18import { useEffect, useState } from "react"1920import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"21import { Button } from "@/components/ui/button"22import {23 Card,24 CardContent,25 CardDescription,26 CardFooter,27 CardHeader,28 CardTitle29} from "@/components/ui/card"30import { Separator } from "@/components/ui/separator"31import { Skeleton } from "@/components/ui/skeleton"32import { Spinner } from "@/components/ui/spinner"33import { oauthProviderPlugin } from "@/lib/auth/oauth-provider-plugin"34import { cn } from "@/lib/utils"35import { UserAvatar } from "../user/user-avatar"3637export type OAuthConsentProps = {38 className?: string39}4041const interpolateClient = (template: string, clientName: string) =>42 template.replace("{{client}}", clientName)4344export function OAuthConsent({ className }: OAuthConsentProps) {45 const { authClient } = useAuth()46 const { localization, scopeMetadata } = useAuthPlugin(oauthProviderPlugin)47 const oauthClient = authClient as OAuthProviderAuthClient48 const { data: session, isPending: isSessionPending } = useSession(oauthClient)49 const [request, setRequest] = useState<OAuthAuthorizationRequest>()5051 useEffect(() => {52 setRequest(parseOAuthAuthorizationRequest(window.location.search))53 }, [])5455 const publicClient = usePublicOAuthClient(oauthClient, request?.clientId, {56 enabled: Boolean(session && request?.clientId)57 })58 const consent = useOAuthConsent(oauthClient)59 const client = publicClient.data60 const clientName = client?.client_name || localization.application61 const logoUrl = sanitizeOAuthClientUrl(client?.logo_uri)62 const policyUrl = sanitizeOAuthClientUrl(client?.policy_uri)63 const termsUrl = sanitizeOAuthClientUrl(client?.tos_uri)64 const requestResolved = request !== undefined65 const invalidRequest =66 requestResolved &&67 (!request.clientId ||68 (!isSessionPending && !session) ||69 publicClient.isError ||70 (!publicClient.isPending && session && !client))71 const canRespond = Boolean(72 request?.clientId && session && client && !consent.isPending73 )7475 if (invalidRequest) {76// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from better-auth-ui
All 49 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Account Settingsaccount-settings | better-auth-ui | Components | Free | 2 deps | |
| Active Sessionsactive-sessions | better-auth-ui | Components | Free | 5 deps · 2 files | |
| Additional Fieldadditional-field | better-auth-ui | Components | Free | 5 deps | |
| Adminadmin | better-auth-ui | Components | Free | 4 deps · 3 files | |
| Anonymousanonymous | better-auth-ui | Components | Free | 4 deps · 3 files | |
| API Keyapi-key | better-auth-ui | Components | Free | 4 deps · 10 files | |
| Authauth | better-auth-ui | Components | Free | 2 deps | |
| Auth Providerauth-provider | better-auth-ui | Components | Free | 4 deps · 2 files |
