BETTER-AUTH. UI
Integrations

React

This guide covers integrating @daveyplate/better-auth-ui into your React project.

Setting up AuthUIProvider

First, set up <AuthUIProvider> as it provides context and hooks required by all subsequent authentication components. Create a top-level provider to encapsulate your app:

src/providers.tsx
import { AuthUIProvider } from "@daveyplate/better-auth-ui"
import { authClient } from "@/lib/auth-client"
import { useNavigate, NavLink } from "react-router-dom"
 
export function Providers({ children }: { children: React.ReactNode }) {
  const navigate = useNavigate()
 
  return (
      <AuthUIProvider
        authClient={authClient}
        navigate={navigate}
        LinkComponent={NavLink}
      >
          {children}
      </AuthUIProvider>
    )
}

Wrap your root component with the newly created Providers component in your main app entry point, typically in src/main.tsx or src/index.tsx.

src/main.tsx
import ReactDOM from "react-dom/client"
import App from "./App.tsx"
import { BrowserRouter } from "react-router-dom"
import { Providers } from "./Providers"
 
ReactDOM.createRoot(document.getElementById("root")!).render(
  <BrowserRouter>
    <Providers>
      <App />
    </Providers>
  </BrowserRouter>
)

Creating Auth Pages

Configure routes to render <AuthCard> for authentication views using React Router.

Create a dynamic authentication route such as auth/[pathname].tsx inside your src directory. Here's a recommended setup:

src/pages/auth/AuthPage.tsx
import { useParams } from "react-router-dom"
import { AuthCard } from "@daveyplate/better-auth-ui"
 
export default function AuthPage() {
  const { pathname } = useParams()
 
  return (
    <div className="flex flex-col grow size-full items-center justify-center gap-3">
      <AuthCard pathname={pathname} />
    </div>
  )
}

Use React Router to configure these dynamic authentication routes:

src/App.tsx
import { Routes, Route } from "react-router-dom"
import AuthPage from "./pages/auth/AuthPage"
 
function App() {
  return (
    <Routes>
      <Route path="/auth/:pathname" element={<AuthPage />} />
    </Routes>
  )
}

The dynamic segment [pathname] covers the following default authentication views:

  • /auth/sign-in – Sign in via email, password, social providers, or passkey (WebAuthn)
  • /auth/sign-up – New account registration, with additional fields supported
  • /auth/magic-link – Email login without password
  • /auth/forgot-password – Trigger password reset email
  • /auth/reset-password – Allow users to reset forgotten passwords
  • /auth/sign-out – Log out action
  • /auth/settings – User account management page (authentication required)
  • /auth/callback – Internal OAuth/Auth callback handler (do not use directly)

Your authentication flow is now completely set up and supporting full customization capabilities.

On this page