SDK Reference
React SDK

React SDK

The @bastionauth/react package provides React components and hooks for authentication.

Installation

npm install @bastionauth/react
# or
pnpm add @bastionauth/react
# or
yarn add @bastionauth/react

Setup

Wrap your app with BastionProvider:

import { BastionProvider } from '@bastionauth/react';
 
function App() {
  return (
    <BastionProvider
      publishableKey="pk_live_..."
      apiUrl="https://auth-api.yourdomain.com"
    >
      <YourApp />
    </BastionProvider>
  );
}

Components

SignIn

Pre-built sign-in form with OAuth support:

import { SignIn } from '@bastionauth/react';
 
function SignInPage() {
  return (
    <SignIn
      signUpUrl="/sign-up"
      afterSignInUrl="/dashboard"
      providers={['google', 'github']}
    />
  );
}

SignUp

Pre-built sign-up form:

import { SignUp } from '@bastionauth/react';
 
function SignUpPage() {
  return (
    <SignUp
      signInUrl="/sign-in"
      afterSignUpUrl="/onboarding"
    />
  );
}

UserButton

User avatar dropdown with sign-out:

import { UserButton } from '@bastionauth/react';
 
function Header() {
  return (
    <header>
      <nav>
        <UserButton afterSignOutUrl="/" />
      </nav>
    </header>
  );
}

ProtectedRoute

Route wrapper requiring authentication:

import { ProtectedRoute } from '@bastionauth/react';
 
function Dashboard() {
  return (
    <ProtectedRoute fallback={<SignIn />}>
      <DashboardContent />
    </ProtectedRoute>
  );
}

Hooks

useAuth

Core authentication hook:

import { useAuth } from '@bastionauth/react';
 
function Profile() {
  const { 
    isSignedIn, 
    isLoading, 
    user, 
    signOut,
    getToken 
  } = useAuth();
 
  if (isLoading) return <Spinner />;
  if (!isSignedIn) return <SignIn />;
 
  return (
    <div>
      <p>Welcome, {user.email}</p>
      <button onClick={signOut}>Sign Out</button>
    </div>
  );
}

useUser

Access and update user data:

import { useUser } from '@bastionauth/react';
 
function Settings() {
  const { user, updateUser, isLoading } = useUser();
 
  const handleUpdate = async () => {
    await updateUser({
      firstName: 'New Name',
    });
  };
 
  return (
    <form onSubmit={handleUpdate}>
      <input defaultValue={user?.firstName} />
      <button disabled={isLoading}>Save</button>
    </form>
  );
}

useOrganization

Manage organizations:

import { useOrganization } from '@bastionauth/react';
 
function OrgSettings() {
  const { 
    organization, 
    membership, 
    isAdmin 
  } = useOrganization();
 
  return (
    <div>
      <h1>{organization?.name}</h1>
      <p>Role: {membership?.role}</p>
      {isAdmin && <AdminPanel />}
    </div>
  );
}

Styling

Components use CSS variables for theming:

:root {
  --bastion-primary: #00F0FF;
  --bastion-background: #0A0E14;
  --bastion-text: #F8FAFC;
  --bastion-border: rgba(255, 255, 255, 0.1);
}

Or use the appearance prop:

<SignIn
  appearance={{
    accentColor: '#7C3AED',
  }}
/>