PluginBench
Skill
Official
Review
Audit score 70

auth0-react

auth0/agent-skills

Add Auth0 authentication to React SPAs with login, logout, protected routes, and user sessions.

What is auth0-react?

Integrates @auth0/auth0-react SDK for Auth0 Universal Login in React single-page applications. Use this when adding authentication, protecting routes, or managing user sessions in React 16+, Vite, or Create React App projects.

  • Wrap your React app with Auth0Provider for centralized authentication
  • Use useAuth0() hook to access login, logout, user profile, and authentication state
  • Protect routes and API calls with access tokens
  • Handle MFA enrollment, challenges, and verification flows
  • Manage secure token storage automatically without manual localStorage handling
  • Support for React 16, 17, 18, and 19 with Vite or Create React App

How to install auth0-react

npx skills add https://github.com/auth0/agent-skills --skill auth0-react
Prerequisites
  • React 16.11 or higher (supports React 16, 17, 18, 19)
  • Auth0 account with an application configured
  • Vite or Create React App project
  • auth0-cli skill (for automated setup)
Claude Code
Cursor
Windsurf
Cline

How to use auth0-react

  1. 1.Install the SDK: npm install @auth0/auth0-react
  2. 2.Create .env file with VITE_AUTH0_DOMAIN and VITE_AUTH0_CLIENT_ID (Vite) or REACT_APP_AUTH0_DOMAIN and REACT_APP_AUTH0_CLIENT_ID (CRA)
  3. 3.Wrap your app with Auth0Provider in src/main.tsx or src/index.tsx, passing domain, clientId, and redirect_uri
  4. 4.Import useAuth0 hook in components and use isAuthenticated, user, loginWithRedirect(), and logout()
  5. 5.Test the login flow by running npm run dev (Vite) or npm start (CRA)

Use cases

Good for
  • Add login/logout buttons to a React SPA with Auth0 Universal Login redirect
  • Protect specific routes so only authenticated users can access them
  • Make authenticated API calls by retrieving and attaching access tokens
  • Implement multi-factor authentication (MFA) with OTP, SMS, Email, Voice, or Push
  • Display user profile information after successful authentication
Who it's for
  • React developers building single-page applications
  • Teams using Auth0 for identity management
  • Developers migrating from other auth providers to Auth0
  • Projects requiring MFA or advanced authentication flows

auth0-react FAQ

Should I use this for Next.js?

No. Use the auth0-nextjs skill instead, which supports both App Router and Pages Router.

Can I use this for React Native mobile apps?

No. Use the auth0-react-native skill for iOS and Android applications.

What's the difference between Vite and Create React App environment variables?

Vite uses VITE_ prefix (import.meta.env.VITE_*), while Create React App uses REACT_APP_ prefix (process.env.REACT_APP_*).

How do I make authenticated API calls?

Use getAccessTokenSilently() from useAuth0() to retrieve an access token, then attach it to your API request headers as Authorization: Bearer <token>.

How do I handle MFA?

Catch MfaRequiredError from getAccessTokenSilently(), then use the mfa property from useAuth0() to call mfa.enroll(), mfa.challenge(), or mfa.verify() as needed.

Full instructions (SKILL.md)

Source of truth, from auth0/agent-skills.


name: auth0-react description: > Use when adding Auth0 login, logout, protected routes, or user sessions to a React SPA. Integrates @auth0/auth0-react — use even if the user says "add login to my React app" or "protect my React routes" without naming the SDK. license: Apache-2.0 metadata: author: Auth0 support@auth0.com version: '1.0.0' openclaw: emoji: "\U0001F510" homepage: https://github.com/auth0/agent-skills requires: bins: - auth0 skills: - auth0-cli os: - darwin - linux install: - id: brew kind: brew package: auth0/auth0-cli/auth0 bins: [auth0] label: 'Install Auth0 CLI (brew)'

Auth0 React Integration

Add authentication to React single-page applications using @auth0/auth0-react.


Prerequisites

  • React 16.11+ application (Vite or Create React App) - supports React 16, 17, 18, and 19
  • Auth0 account and application configured
  • If you don't have Auth0 set up yet, use the auth0-quickstart skill first

When NOT to Use

  • Next.js applications - Use auth0-nextjs skill for both App Router and Pages Router
  • React Native mobile apps - Use auth0-react-native skill for iOS/Android
  • Server-side rendered React - Use framework-specific SDK (Next.js, Remix, etc.)
  • Embedded login - This SDK uses Auth0 Universal Login (redirect-based)
  • Backend API authentication - Use express-openid-connect or JWT validation instead

Quick Start Workflow

1. Install SDK

npm install @auth0/auth0-react

2. Configure Environment

For automated setup with Auth0 CLI, see Setup Guide for complete scripts.

For manual setup:

Create .env file:

Vite:

VITE_AUTH0_DOMAIN=your-tenant.auth0.com
VITE_AUTH0_CLIENT_ID=your-client-id

Create React App:

REACT_APP_AUTH0_DOMAIN=your-tenant.auth0.com
REACT_APP_AUTH0_CLIENT_ID=your-client-id

3. Wrap App with Auth0Provider

Update src/main.tsx (Vite) or src/index.tsx (CRA):

import React from 'react';
import ReactDOM from 'react-dom/client';
import { Auth0Provider } from '@auth0/auth0-react';
import App from './App';

ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <Auth0Provider
      domain={import.meta.env.VITE_AUTH0_DOMAIN} // or process.env.REACT_APP_AUTH0_DOMAIN
      clientId={import.meta.env.VITE_AUTH0_CLIENT_ID}
      authorizationParams={{
        redirect_uri: window.location.origin
      }}
    >
      <App />
    </Auth0Provider>
  </React.StrictMode>
);

4. Add Authentication UI

import { useAuth0 } from '@auth0/auth0-react';

export function LoginButton() {
  const { loginWithRedirect, logout, isAuthenticated, user, isLoading } = useAuth0();

  if (isLoading) return <div>Loading...</div>;

  if (isAuthenticated) {
    return (
      <div>
        <span>Welcome, {user?.name}</span>
        <button onClick={() => logout({ logoutParams: { returnTo: window.location.origin } })}>
          Logout
        </button>
      </div>
    );
  }

  return <button onClick={() => loginWithRedirect()}>Login</button>;
}

5. Test Authentication

Start your dev server and test the login flow:

npm run dev  # Vite
# or
npm start    # CRA

Detailed Documentation

  • Setup Guide - Automated setup scripts (Bash/PowerShell), CLI commands, manual configuration
  • Integration Guide - Protected routes, API calls, error handling, advanced patterns
  • API Reference - Complete SDK API, configuration options, hooks reference, testing strategies

Common Mistakes

MistakeFix
Forgot to add redirect URI in Auth0 DashboardAdd your application URL (e.g., http://localhost:3000, https://app.example.com) to Allowed Callback URLs in Auth0 Dashboard
Using wrong env var prefixVite uses VITE_ prefix, Create React App uses REACT_APP_
Not handling loading stateAlways check isLoading before rendering auth-dependent UI
Storing tokens in localStorageNever manually store tokens - SDK handles secure storage automatically
Missing Auth0Provider wrapperEntire app must be wrapped in <Auth0Provider>
Provider not at root levelAuth0Provider must wrap all components that use auth hooks
Wrong import path for env varsVite uses import.meta.env.VITE_*, CRA uses process.env.REACT_APP_*
Using acr_values redirect for in-app MFAUse useAuth0().mfa API for in-app enrollment/challenge/verify flows
Not catching MfaRequiredErrorWrap getAccessTokenSilently in try/catch and check instanceof MfaRequiredError
Making direct HTTP calls to MFA endpointsUse the mfa property from useAuth0() — it handles token management automatically
Forgetting refresh tokens for step-up MFASet useRefreshTokens={true} on Auth0Provider when using interactiveErrorHandler="popup"

Related Skills

  • auth0-quickstart - Basic Auth0 setup
  • auth0-migration - Migrate from another auth provider
  • auth0-mfa - Add Multi-Factor Authentication
  • auth0-cli - Manage Auth0 resources from the terminal

Quick Reference

Core Hooks:

  • useAuth0() - Main authentication hook
  • isAuthenticated - Check if user is logged in
  • user - User profile information
  • loginWithRedirect() - Initiate login
  • logout() - Log out user
  • getAccessTokenSilently() - Get access token for API calls
  • mfa - MFA API client for enrollment, challenge, and verification
    • mfa.getAuthenticators(mfaToken) - List enrolled authenticators
    • mfa.getEnrollmentFactors(mfaToken) - Get available enrollment factors
    • mfa.enroll(params) - Enroll new authenticator (OTP, SMS, Email, Voice, Push)
    • mfa.challenge(params) - Initiate MFA challenge
    • mfa.verify(params) - Verify MFA challenge and complete authentication

MFA Error Types (import from @auth0/auth0-react):

  • MfaRequiredError - Thrown by getAccessTokenSilently when MFA is needed (has mfa_token and mfa_requirements)
  • MfaEnrollmentError, MfaChallengeError, MfaVerifyError - Thrown by respective mfa.* methods

Common Use Cases:


References