メインコンテンツへスキップ

セットアップ要件

Auth0の構成が必要 - テナントがMy Organization APIで構成されていることを 確認してください。セットアップガイドを表示 →

インストール

pnpm add @auth0/universal-components-react
shadcnコマンドを実行すると、共有ユーティリティとAuth0統合の@auth0/universal-components-core 依存関係もインストールされます。

クイックスタート

import { DomainTable } from "@auth0/universal-components-react/spa";

export function DomainsPage() {
  return <DomainTable />;
}
この例ではReact SPAを使用していますが、props構成(schema、customMessages、stylingなど)はNext.jsやshadcnのセットアップにも同様に適用されます。
import React from "react";
import { DomainTable } from "@auth0/universal-components-react/spa";
import { Auth0Provider } from "@auth0/auth0-react";
import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa";
import { useNavigate } from "react-router-dom";

function DomainsManagementPage() {
  const navigate = useNavigate();

  return (
    <div className="max-w-6xl mx-auto p-6">
      <DomainTable
        schema={{
          create: {
            domain: {
              regex: /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i,
              errorMessage: "有効なドメイン(例:example.com)を入力してください",
            },
          },
        }}
        createAction={{
          onBefore: (domain) => {
            if (!domain.domain.includes(".")) {
              alert("TLDがある有効なドメインを入力してください");
              return false;
            }
            return true;
          },
          onAfter: (domain) => console.log("Domain created:", domain),
        }}
        verifyAction={{
          onAfter: (domain) => {
            console.log("Domain verified:", domain.domain);
          },
        }}
        deleteAction={{
          onBefore: (domain) => {
            return confirm(`${domain.domain}を削除しますか?`);
          },
        }}
        onOpenProvider={(provider) => {
          navigate(`/providers/${provider.id}`);
        }}
        onCreateProvider={() => {
          navigate("/providers/create");
        }}
        customMessages={{
          header: {
            title: "ドメイン管理",
            description: "Organizationのドメインを追加・検証",
            create_button_text: "新しいドメインを追加",
          },
        }}
        styling={{
          variables: {
            common: { "--font-size-label": "12px" },
            light: { "--color-primary": "#0066cc" },
          },
          classes: {
            "DomainTable-header": "shadow-lg rounded-xl",
          },
        }}
      />
    </div>
  );
}

export default function App() {
  return (
    <Auth0Provider
      domain="your-domain.auth0.com"
      clientId="your-client-id"
      authorizationParams={{
        redirect_uri: window.location.origin,
      }}
    >
      <Auth0ComponentProvider>
        <DomainsManagementPage />
      </Auth0ComponentProvider>
    </Auth0Provider>
  );
}

Props

Display Props

Display propsは、コンポーネントのレンダリングを制御します。その動作に影響することはありません。セクションを非表示にする場合、または読み取り専用モードを有効にする場合に使用します。
Prop種類説明
readOnlybooleanすべてのドメイン操作を無効にします。デフォルト値:false
hideHeaderbooleanヘッダーセクションを非表示にします。デフォルト値:false

Action Props

Action propsはユーザーインタラクションを処理し、ユーザーがドメイン操作を実行したときに何が起こるかを定義します。ライフサイクルフック(onBeforeonAfter)を使用して、アプリケーションのルーティングや分析と連携できます。
Prop種類説明
createActionComponentAction<Domain>ドメインアクションを作成します。詳細
verifyActionComponentAction<Domain>ドメインアクションを検証します。詳細
deleteActionComponentAction<Domain>ドメインアクションを削除します。詳細
associateToProviderActionComponentAction<Domain, IdentityProvider>ドメインをプロバイダーに関連付けます。詳細
deleteFromProviderActionComponentAction<Domain, IdentityProvider>ドメインをプロバイダーから削除します。詳細
onOpenProvider(provider: IdentityProvider) => void構成モーダルからプロバイダーへ移動します。 詳細
onCreateProvider() => voidプロバイダー作成フローに移動します。詳細

createAction

種類: ComponentAction<Domain> ドメイン作成フローを制御します。新しいドメインが追加されたときは、onAfterを使用して追跡します。 プロパティ:
  • disabled - [ドメインを追加]ボタンを無効にします
  • onBefore(domain) - ドメインの作成前に実行します。作成を防ぐ場合はfalseを返します(ドメインの形式が無効な場合など)。
  • onAfter(domain) - ドメインが正常に作成された後で実行します。通知を表示する場合、またはイベントを追跡する場合に使用します。
例:
<DomainTable
  createAction={{
    onBefore: (domain) => {
      // Validate domain format
      if (!domain.domain.includes(".")) {
        alert("有効なドメインを入力してください");
        return false;
      }
      return true;
    },
    onAfter: (domain) => {
      analytics.track("Domain Created", { domain: domain.domain });
    },
  }}
/>

verifyAction

種類: ComponentAction<Domain> ドメイン検証フローを制御します。ドメイン検証は、DNS TXTレコードを介して所有権を証明します。 プロパティ:
  • disabled -[検証]ボタンを無効にします
  • onBefore(domain) - 検証を試行する前に実行します。検証を防ぐ場合はfalseを返します(DNSの設定を確認する場合など)。
  • onAfter(domain) - ドメインが正常に検証された後で実行します。成功通知を表示する場合に使用します。
例:
<DomainTable
  verifyAction={{
    onBefore: (domain) => {
      return confirm(
        `${domain.domain}を検証しますか?DNSレコードが構成されていることを確認してください。`,
      );
    },
    onAfter: (domain) => {
      toast.success(`${domain.domain}が正常に検証されました。`);
    },
  }}
/>

deleteAction

種類: ComponentAction<Domain> ドメイン削除を制御します。これは破壊的な操作であるため、確認にはonBeforeの使用を推奨します。 プロパティ:
  • disabled -[削除]ボタンを無効にします
  • onBefore(domain) - 削除の前に実行します。削除を防ぐ場合はfalseを返します(確認ダイアログで推奨)。
  • onAfter(domain) - ドメインが正常に削除された後で実行します。イベントを追跡したり、通知を表示したりする場合に使用します。
例:
<DomainTable
  deleteAction={{
    onBefore: (domain) => {
      return confirm(`${domain.domain}を削除しますか?この操作は元に戻せません。`);
    },
    onAfter: (domain) => {
      analytics.track("Domain Deleted", { domain: domain.domain });
    },
  }}
/>

associateToProviderAction

種類: ComponentAction<Domain, IdentityProvider> 検証済みドメインのSSOプロバイダーとの関連付けを制御します。関連付けられるのは検証済みドメインだけです。 プロパティ:
  • disabled - 関連付けアクションを無効にします
  • onBefore(domain, provider) - 関連付けの前に実行します。関連付けを防ぐ場合はfalseを返します。
  • onAfter(domain, provider) - ドメインが正常にプロバイダーに関連付けられた後で実行します。
例:
<DomainTable
  associateToProviderAction={{
    onAfter: (domain, provider) => {
      console.log(`Associated ${domain.domain} with ${provider.name}`);
    },
  }}
/>

deleteFromProviderAction

種類: ComponentAction<Domain, IdentityProvider> ドメインとSSOプロバイダーの関連付けの削除を制御します。 プロパティ:
  • disabled - 関連付け解除アクションを無効にします
  • onBefore(domain, provider) - 削除の前に実行します。削除を防ぐ場合はfalseを返します。
  • onAfter(domain, provider) - ドメインが正常にプロバイダーから削除された後で実行します。

onOpenProvider / onCreateProvider

種類: (provider: IdentityProvider) => void / () => void ドメイン構成モーダルのナビゲーションハンドラー。ユーザーがドメインのプロバイダー関連付けを構成する際:
  • onOpenProvider - ユーザーが既存のプロバイダーをクリックして表示/編集すると呼び出されます
  • onCreateProvider - ユーザーがクリックして新しいプロバイダーを作成すると呼び出されます
例:
<DomainTable
  onOpenProvider={(provider) => {
    navigate(`/providers/${provider.id}`);
  }}
  onCreateProvider={() => {
    navigate("/providers/create");
  }}
/>

Customization Props

Customization propsを使うと、ソースコードに変更を加えることなく、コンポーネントをブランド・ロケール・検証要件に合わせることができます。
Prop種類説明
schemaDomainTableSchemaドメインURLの検証ルール。詳細
customMessagesPartial<DomainTableMainMessages>i18nテキストのオーバーライド。詳細
stylingComponentStylingCSS変数とクラスのオーバーライド。詳細

schema

ドメインURL入力用にカスタム検証ルールを設定します。
create.domainUrl - ドメインURL検証 - regex - カスタムのregexのパターン
  • errorMessage - カスタムエラーメッセージ
<DomainTable
  schema={{
    create: {
      domain: {
        regex: /^[a-z0-9.-]+\.[a-z]{2,}$/,
        errorMessage: "有効なドメイン(例:example.com)を入力してください。",
      },
    },
  }}
/>

customMessages

すべてのテキストと翻訳をカスタマイズします。フィールドはすべて任意で、入力しなかった場合はデフォルト値が使用されます。
header - コンポーネントヘッダー
  • title, description, create_button_text
table - 表の表示
  • empty_message
  • columns.domain, columns.status
  • actions.configure_button_text, actions.verify_button_text, actions.delete_button_text
create.modal - ドメイン作成モーダル
  • title
  • field.label, field.placeholder, field.error
  • actions.cancel_button_text, actions.create_button_text
verify.modal - ドメイン検証モーダル
  • title
  • txt_record_name.label, txt_record_content.label, verification_status.label
  • actions.verify_button_text, actions.done_button_text
delete.modal - 削除確認
  • title
  • description.pending, description.verified
  • actions.cancel_button_text, actions.create_button_text
configure.modal - プロバイダー構成
  • title, description
  • table.empty_message, table.columns.name
  • actions.close_button_text
notifications - APIリスポンス
  • domain_create_success, domain_create_error
  • domain_verify_success, domain_delete_success
<DomainTable
  customMessages={{
    header: {
      title: "ドメイン管理",
      description: "Organizationのドメインの構成と検証",
      create_button_text: "ドメインを追加",
    },
    table: {
      empty_message: "まだドメインがありません。追加して開始してください。",
    },
    notifications: {
      domain_create_success: "ドメインが正常に追加されました",
      domain_verify_success: "ドメインが検証されました",
      domain_delete_success: "ドメインが削除されました",
    },
  }}
/>

styling

CSS変数とクラスのオーバーライドを使って外観をカスタマイズします。テーマ認識型のスタイルをサポートします。
Variables - CSSカスタムプロパティ
  • common - すべてのテーマに適用
  • light - ライトテーマのみ
  • dark - ダークテーマのみ
Classes - コンポーネントクラスのオーバーライド
  • DomainTable-header
  • DomainTable-table
  • DomainTable-createModal
  • DomainTable-configureModal
  • DomainTable-deleteModal
<DomainTable
  styling={{
    variables: {
      common: { "--font-size-title": "1rem" },
      light: { "--color-primary": "#4f46e5" },
    },
    classes: {
      "DomainTable-header": "mb-6",
      "DomainTable-table": "rounded-lg shadow-sm",
    },
  }}
/>

高度なカスタマイズ

DomainTableコンポーネントは、小さいサブコンポーネントとフックで構成されます。shadcnを使用する場合は、個別にインポートしてカスタムドメインワークフローを構築できます。

利用可能なサブコンポーネント

高度なユースケースの場合は、個々のサブコンポーネントをインポートしてカスタムドメイン管理インターフェイスを構築できます。これは、異なるコンテキストで特定のモーダルを埋め込む必要がある場合や、propsで可能な範囲を超えてテーブルレイアウトをカスタマイズする場合に便利です。
コンポーネント説明
DomainCreateModalドメイン作成のためのモーダル
DomainVerifyModal検証フローのモーダル
DomainDeleteModal削除確認モーダル
DomainConfigureProvidersModalプロバイダーの関連付けを管理
DomainTableActionsColumn各ドメイン行のアクションボタン

利用可能なフック

これらのフックは、UIなしで基盤となるロジックを提供します。フックを使用することで、Auth0 API統合を活用しながら、完全にカスタムのインターフェイスを構築できます。
フック説明
useDomainTableデータ+APIレイヤー(取得、作成、検証、削除、関連付け)
useDomainTableLogicUIインタラクションの状態 + ハンドラー(モーダル、通知)