claude-skills/

Anthropic公式スキル・プラグインの日本語ディレクトリ

last sync 22h ago
スキルOfficialsecurity

🔐auth0-react-native

プラグイン
auth0
ライセンス
Apache-2.0

説明

次のような場合に使用: 素のReact Nativeアプリ(Expoなし)にAuth0のログイン・ログアウト、または生体認証を追加する場合。 `react-native-auth0` をネイティブのディープリンクと統合します。

原文を表示

Use when adding Auth0 login, logout, or biometric auth to a bare React Native app (not Expo). Integrates react-native-auth0 with native deep linking.

ユースケース

  • 素のReact Nativeアプリにログイン機能を追加するとき
  • 素のReact Nativeアプリにログアウト機能を追加するとき
  • 素のReact Nativeアプリに生体認証を追加するとき
  • Auth0とネイティブディープリンクを統合するとき

本文(日本語訳)

Auth0 React Native インテグレーション

react-native-auth0 を使用して、React Native および Expo モバイルアプリケーションに認証機能を追加します。


前提条件

  • React Native または Expo アプリケーション
  • Auth0 アカウント、および Native タイプとして設定済みの Auth0 アプリケーション
  • Auth0 をまだセットアップしていない場合は、先に auth0-quickstart スキルを使用してください

使用しない場合

  • Expo マネージドワークフロー — config plugin を使用する Expo アプリには auth0-expo スキルを使用
  • React Web アプリケーション — SPA(Vite/CRA)には auth0-react スキルを使用
  • React Server Components — Next.js アプリケーションには auth0-nextjs を使用
  • React 以外のネイティブアプリ — プラットフォーム固有の SDK を使用(iOS は Swift、Android は Kotlin)
  • バックエンド API — サーバー言語に対応した JWT 検証ライブラリを使用

クイックスタート手順

1. SDK のインストール

Expo:

npx expo install react-native-auth0

React Native CLI:

npm install react-native-auth0
npx pod-install  # iOS のみ

2. 環境設定

Auth0 CLI を使った自動セットアップについては、完全なスクリプトを含む セットアップガイド を参照してください。

手動セットアップの場合:

.env を作成します:

AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id

3. ネイティブプラットフォームの設定

iOSios/{YourApp}/Info.plist を更新:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>None</string>
    <key>CFBundleURLName</key>
    <string>auth0</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>$(PRODUCT_BUNDLE_IDENTIFIER).auth0</string>
    </array>
  </dict>
</array>

Androidandroid/app/src/main/AndroidManifest.xml を更新:

<activity
    android:name="com.auth0.android.provider.RedirectActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="YOUR_AUTH0_DOMAIN"
            android:pathPrefix="/android/${applicationId}/callback"
            android:scheme="${applicationId}" />
    </intent-filter>
</activity>

Expoapp.json を更新:

{
  "expo": {
    "scheme": "your-app-scheme",
    "ios": {
      "bundleIdentifier": "com.yourcompany.yourapp"
    },
    "android": {
      "package": "com.yourcompany.yourapp"
    }
  }
}

4. Auth0Provider による認証の追加

アプリ全体を Auth0Provider でラップします:

import React from 'react';
import { Auth0Provider } from 'react-native-auth0';
import App from './App';

export default function Root() {
  return (
    <Auth0Provider
      domain={process.env.AUTH0_DOMAIN}
      clientId={process.env.AUTH0_CLIENT_ID}
    >
      <App />
    </Auth0Provider>
  );
}

5. useAuth0 フックの使用

import React from 'react';
import { View, Button, Text, ActivityIndicator } from 'react-native';
import { useAuth0 } from 'react-native-auth0';

export default function App() {
  const { user, authorize, clearSession, isLoading } = useAuth0();

  const login = async () => {
    try {
      await authorize({
        scope: 'openid profile email'
      });
    } catch (error) {
      console.error('Login error:', error);
    }
  };

  const logout = async () => {
    try {
      await clearSession();
    } catch (error) {
      console.error('Logout error:', error);
    }
  };

  if (isLoading) {
    return <ActivityIndicator />;
  }

  return (
    <View>
      {user ? (
        <>
          <Text>Welcome, {user.name}!</Text>
          <Text>{user.email}</Text>
          <Button title="Logout" onPress={logout} />
        </>
      ) : (
        <Button title="Login" onPress={login} />
      )}
    </View>
  );
}

6. 認証のテスト

Expo:

npx expo start

React Native:

npx react-native run-ios
# または
npx react-native run-android

詳細ドキュメント


よくある間違い

間違い 対処法
アプリを Auth0Provider でラップし忘れた useAuth0() を使用するすべてのコンポーネントは Auth0Provider の子である必要があります
ディープリンクの設定を忘れた iOS の Info.plist および Android の AndroidManifest.xml に URL スキームを追加してください(手順 3 参照)
コールバック URL が一致しない Auth0 ダッシュボードのコールバック URL がアプリの URL スキームと一致していることを確認してください(例: com.yourapp.auth0://YOUR_DOMAIN/ios/com.yourapp/callback
インストール後に iOS ビルドが失敗する npx pod-install を実行してネイティブ依存関係をリンクしてください
Auth0 でアプリが SPA タイプとして作成されている モバイルアプリには Native アプリケーションタイプである必要があります
認証エラーを処理していない authorize / clearSession の呼び出しを try-catch ブロックでラップしてください
Android でディープリンクが機能しない RedirectActivity に android:exported="true" が設定されていることを確認してください

関連スキル

  • auth0-quickstart — Auth0 の基本セットアップ
  • auth0-migration — 別の認証プロバイダーからの移行
  • auth0-mfa — 多要素認証の追加
  • auth0-cli — ターミナルからの Auth0 リソース管理

クイックリファレンス

コアフック API:

  • useAuth0() — 認証用のメインフック
  • authorize() — ログインの開始
  • clearSession() — ログアウト
  • user — ユーザープロフィールオブジェクト
  • getCredentials() — API 呼び出し用トークンの取得
  • isLoading — ローディング状態

主なユースケース:

  • ログイン / ログアウト → 上記の手順 5 を参照
  • セキュアなトークンストレージ → Auth0Provider により自動処理
  • 生体認証 → パターンガイド
  • トークンを使った API 呼び出し → パターンガイド
  • トークンリフレッシュ → getCredentials() により自動処理

参考資料

原文(English)を表示

Auth0 React Native Integration

Add authentication to React Native and Expo mobile applications using react-native-auth0.


Prerequisites

  • React Native or Expo application
  • Auth0 account and application configured as Native type
  • If you don't have Auth0 set up yet, use the auth0-quickstart skill first

When NOT to Use

  • Expo managed workflow - Use auth0-expo skill for Expo apps with config plugin
  • React web applications - Use auth0-react skill for SPAs (Vite/CRA)
  • React Server Components - Use auth0-nextjs for Next.js applications
  • Non-React native apps - Use platform-specific SDKs (Swift for iOS, Kotlin for Android)
  • Backend APIs - Use JWT validation libraries for your server language

Quick Start Workflow

1. Install SDK

Expo:

npx expo install react-native-auth0

React Native CLI:

npm install react-native-auth0
npx pod-install  # iOS only

2. Configure Environment

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

For manual setup:

Create .env:

AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_CLIENT_ID=your-client-id

3. Configure Native Platforms

iOS - Update ios/{YourApp}/Info.plist:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>None</string>
    <key>CFBundleURLName</key>
    <string>auth0</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>$(PRODUCT_BUNDLE_IDENTIFIER).auth0</string>
    </array>
  </dict>
</array>

Android - Update android/app/src/main/AndroidManifest.xml:

<activity
    android:name="com.auth0.android.provider.RedirectActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:host="YOUR_AUTH0_DOMAIN"
            android:pathPrefix="/android/${applicationId}/callback"
            android:scheme="${applicationId}" />
    </intent-filter>
</activity>

Expo - Update app.json:

{
  "expo": {
    "scheme": "your-app-scheme",
    "ios": {
      "bundleIdentifier": "com.yourcompany.yourapp"
    },
    "android": {
      "package": "com.yourcompany.yourapp"
    }
  }
}

4. Add Authentication with Auth0Provider

Wrap your app with Auth0Provider:

import React from 'react';
import { Auth0Provider } from 'react-native-auth0';
import App from './App';

export default function Root() {
  return (
    <Auth0Provider
      domain={process.env.AUTH0_DOMAIN}
      clientId={process.env.AUTH0_CLIENT_ID}
    >
      <App />
    </Auth0Provider>
  );
}

5. Use the useAuth0 Hook

import React from 'react';
import { View, Button, Text, ActivityIndicator } from 'react-native';
import { useAuth0 } from 'react-native-auth0';

export default function App() {
  const { user, authorize, clearSession, isLoading } = useAuth0();

  const login = async () => {
    try {
      await authorize({
        scope: 'openid profile email'
      });
    } catch (error) {
      console.error('Login error:', error);
    }
  };

  const logout = async () => {
    try {
      await clearSession();
    } catch (error) {
      console.error('Logout error:', error);
    }
  };

  if (isLoading) {
    return <ActivityIndicator />;
  }

  return (
    <View>
      {user ? (
        <>
          <Text>Welcome, {user.name}!</Text>
          <Text>{user.email}</Text>
          <Button title="Logout" onPress={logout} />
        </>
      ) : (
        <Button title="Login" onPress={login} />
      )}
    </View>
  );
}

6. Test Authentication

Expo:

npx expo start

React Native:

npx react-native run-ios
# or
npx react-native run-android

Detailed Documentation

  • Setup Guide - Automated setup, native configuration, deep linking
  • Patterns Guide - Secure storage, biometric auth, token refresh
  • API Reference - Complete SDK API, methods, configuration options

Common Mistakes

Mistake Fix
Forgot to wrap app with Auth0Provider All components using useAuth0() must be children of Auth0Provider
Forgot to configure deep linking Add URL scheme to iOS Info.plist and Android AndroidManifest.xml (see Step 3)
Callback URL mismatch Ensure callback URL in Auth0 Dashboard matches your app's URL scheme (e.g., com.yourapp.auth0://YOUR_DOMAIN/ios/com.yourapp/callback)
iOS build fails after install Run npx pod-install to link native dependencies
App created as SPA type in Auth0 Must be Native application type for mobile apps
Not handling auth errors Wrap authorize/clearSession calls in try-catch blocks
Deep link not working on Android Verify android:exported="true" is set on RedirectActivity

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 Hook API:

  • useAuth0() - Main hook for authentication
  • authorize() - Initiate login
  • clearSession() - Logout
  • user - User profile object
  • getCredentials() - Get tokens for API calls
  • isLoading - Loading state

Common Use Cases:

  • Login/Logout → See Step 5 above
  • Secure token storage → Automatic with Auth0Provider
  • Biometric authentication → Patterns Guide
  • API calls with tokens → Patterns Guide
  • Token refresh → Automatic with getCredentials()

References

原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。