次のような場合に使用: React製のシングルページアプリケーション(ひとつのページで動作するウェブアプリ)に、Auth0(クラウド認証サービス)を使用したログイン・ログアウト機能、保護されたページ、またはユーザーセッション(利用状態の保持)を追加する場合。 @auth0/auth0-react というライブラリと統合します。ユーザーが「Reactアプリにログイン機能を追加してほしい」や「Reactのページを保護してほしい」と言った場合でも、具体的なSDK(開発キット)の名前を挙げていなければこのスキルを使用してください。
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.
@auth0/auth0-react を使用して、React シングルページアプリケーションに認証機能を追加します。
auth0-quickstart スキルを使用してくださいauth0-nextjs スキルを使用してくださいauth0-react-native スキルを使用してくださいnpm install @auth0/auth0-react
Auth0 CLI を使った自動セットアップの場合は、完全なスクリプトについて セットアップガイド を参照してください。
手動セットアップの場合:
.env ファイルを作成します:
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
src/main.tsx(Vite)または 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} // または process.env.REACT_APP_AUTH0_DOMAIN
clientId={import.meta.env.VITE_AUTH0_CLIENT_ID}
authorizationParams={{
redirect_uri: window.location.origin
}}
>
<App />
</Auth0Provider>
</React.StrictMode>
);
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>;
}
開発サーバーを起動し、ログインフローをテストします:
npm run dev # Vite
# または
npm start # CRA
| 間違い | 対処法 |
|---|---|
| Auth0 Dashboard へのリダイレクト URI の追加を忘れた | Auth0 Dashboard の Allowed Callback URLs に アプリケーションの URL(例:http://localhost:3000、https://app.example.com)を追加してください |
| 環境変数のプレフィックスが間違っている | Vite は VITE_ プレフィックス、Create React App は REACT_APP_ プレフィックスを使用します |
| ローディング状態を処理していない | 認証に依存する UI をレンダリングする前に、必ず isLoading を確認してください |
| トークンを localStorage に保存している | トークンを手動で保存しないでください — SDK が自動的にセキュアなストレージを管理します |
| Auth0Provider のラップが漏れている | アプリ全体を <Auth0Provider> でラップする必要があります |
| Provider がルートレベルに配置されていない | Auth0Provider は、auth hooks を使用するすべてのコンポーネントをラップしなければなりません |
| 環境変数のインポートパスが間違っている | Vite は import.meta.env.VITE_*、CRA は process.env.REACT_APP_* を使用します |
アプリ内 MFA に acr_values リダイレクトを使用している |
アプリ内の enrollment/challenge/verify フローには useAuth0().mfa API を使用してください |
MfaRequiredError をキャッチしていない |
getAccessTokenSilently を try/catch でラップし、instanceof MfaRequiredError を確認してください |
| MFA エンドポイントに直接 HTTP リクエストを送っている | useAuth0() の mfa プロパティを使用してください — トークン管理を自動的に処理します |
| ステップアップ MFA でリフレッシュトークンを忘れた | interactiveErrorHandler="popup" を使用する場合は、Auth0Provider に useRefreshTokens={true} を設定してください |
auth0-quickstart — Auth0 の基本セットアップauth0-migration — 別の認証プロバイダーからの移行auth0-mfa — 多要素認証(MFA)の追加auth0-cli — ターミナルから Auth0 リソースを管理主要な Hooks:
useAuth0() — メインの認証 hookisAuthenticated — ユーザーがログイン済みかどうかを確認user — ユーザープロフィール情報loginWithRedirect() — ログインを開始logout() — ユーザーをログアウトgetAccessTokenSilently() — API 呼び出し用のアクセストークンを取得mfa — enrollment・challenge・verification 用の MFA API クライアント
mfa.getAuthenticators(mfaToken) — 登録済み authenticator の一覧を取得mfa.getEnrollmentFactors(mfaToken) — 利用可能な enrollment ファクターを取得mfa.enroll(params) — 新しい authenticator を登録(OTP、SMS、Email、Voice、Push)mfa.challenge(params) — MFA チャレンジを開始mfa.verify(params) — MFA チャレンジを検証し、認証を完了MFA エラータイプ(@auth0/auth0-react からインポート):
MfaRequiredError — MFA が必要な場合に getAccessTokenSilently がスロー(mfa_token と mfa_requirements を持つ)MfaEnrollmentError、MfaChallengeError、MfaVerifyError — それぞれ対応する mfa.* メソッドがスロー主なユースケース:
Add authentication to React single-page applications using @auth0/auth0-react.
auth0-quickstart skill firstauth0-nextjs skill for both App Router and Pages Routerauth0-react-native skill for iOS/Androidnpm install @auth0/auth0-react
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
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>
);
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>;
}
Start your dev server and test the login flow:
npm run dev # Vite
# or
npm start # CRA
| Mistake | Fix |
|---|---|
| Forgot to add redirect URI in Auth0 Dashboard | Add your application URL (e.g., http://localhost:3000, https://app.example.com) to Allowed Callback URLs in Auth0 Dashboard |
| Using wrong env var prefix | Vite uses VITE_ prefix, Create React App uses REACT_APP_ |
| Not handling loading state | Always check isLoading before rendering auth-dependent UI |
| Storing tokens in localStorage | Never manually store tokens - SDK handles secure storage automatically |
| Missing Auth0Provider wrapper | Entire app must be wrapped in <Auth0Provider> |
| Provider not at root level | Auth0Provider must wrap all components that use auth hooks |
| Wrong import path for env vars | Vite uses import.meta.env.VITE_*, CRA uses process.env.REACT_APP_* |
Using acr_values redirect for in-app MFA |
Use useAuth0().mfa API for in-app enrollment/challenge/verify flows |
Not catching MfaRequiredError |
Wrap getAccessTokenSilently in try/catch and check instanceof MfaRequiredError |
| Making direct HTTP calls to MFA endpoints | Use the mfa property from useAuth0() — it handles token management automatically |
| Forgetting refresh tokens for step-up MFA | Set useRefreshTokens={true} on Auth0Provider when using interactiveErrorHandler="popup" |
auth0-quickstart - Basic Auth0 setupauth0-migration - Migrate from another auth providerauth0-mfa - Add Multi-Factor Authenticationauth0-cli - Manage Auth0 resources from the terminalCore Hooks:
useAuth0() - Main authentication hookisAuthenticated - Check if user is logged inuser - User profile informationloginWithRedirect() - Initiate loginlogout() - Log out usergetAccessTokenSilently() - Get access token for API callsmfa - MFA API client for enrollment, challenge, and verification
mfa.getAuthenticators(mfaToken) - List enrolled authenticatorsmfa.getEnrollmentFactors(mfaToken) - Get available enrollment factorsmfa.enroll(params) - Enroll new authenticator (OTP, SMS, Email, Voice, Push)mfa.challenge(params) - Initiate MFA challengemfa.verify(params) - Verify MFA challenge and complete authenticationMFA 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.* methodsCommon Use Cases:
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。