Saltar al contenido principal
El componente DomainTable ofrece una interfaz unificada para que tus clientes gestionen el dominio de correo electrónico de su organización en Auth0. Al verificar la propiedad del dominio, los administradores de la organización habilitan funciones B2B clave, como Home Realm Discovery (HRD), y garantizan que los usuarios se redirijan automáticamente al proveedor de SSO correcto según el sufijo de su dirección de correo electrónico (por ejemplo, user@acme.com).

Requisitos de configuración

Se requiere la configuración de Auth0 - Asegúrate de que tu tenant tenga configurada la API My Organization. Ver la guía de configuración →

Instalar el componente

pnpm add @auth0/universal-components-react
Al ejecutar cualquiera de los dos comandos, también se instala la dependencia @auth0/universal-components-core para utilidades compartidas y la integración con Auth0.

Comenzar

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

export function DomainsPage() {
  return <DomainTable />;
}
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: "Please enter a valid domain (e.g., example.com)",
            },
          },
        }}
        createAction={{
          onBefore: (domain) => {
            if (!domain.domain.includes(".")) {
              alert("Please enter a valid domain with a 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(`Delete ${domain.domain}?`);
          },
        }}
        onOpenProvider={(provider) => {
          navigate(`/providers/${provider.id}`);
        }}
        onCreateProvider={() => {
          navigate("/providers/create");
        }}
        customMessages={{
          header: {
            title: "Domain Management",
            description: "Add and verify domains for your organization",
            create_button_text: "Add New Domain",
          },
        }}
        styling={{
          variables: {
            common: { "--font-size-label": "12px" },
            light: { "--color-primary": "#0066cc" },
          },
          classes: {
            "DomainTable-header": "shadow-lg rounded-xl",
          },
        }}
      />
    </div>
  );
}

export default function App() {
  const domain = "your-domain.auth0.com";

  return (
    <Auth0Provider
      domain={domain}
      clientId="your-client-id"
      authorizationParams={{
        redirect_uri: window.location.origin,
      }}
      interactiveErrorHandler="popup" // Necesario para gestionar los desafíos de autenticación escalonada mediante el popup de Universal Login
    >
      <Auth0ComponentProvider domain={domain}>
        <DomainsManagementPage />
      </Auth0ComponentProvider>
    </Auth0Provider>
  );
}

Props

Props de visualización

Las props de visualización controlan cómo se renderiza el componente sin afectar su comportamiento. Úsalas para ocultar secciones o habilitar el modo de solo lectura.
PropTipoDescripción
readOnlybooleanDesactiva todas las operaciones del dominio. Valor predeterminado: false
hideHeaderbooleanOculta la sección del encabezado. Valor predeterminado: false

Props de acción

Las props de acción gestionan las interacciones del usuario y definen qué ocurre cuando los usuarios realizan operaciones de dominio. Usa los hooks de ciclo de vida (onBefore, onAfter) para integrarlos con el enrutamiento y los análisis de tu aplicación.
PropiedadTipoDescripción
createActionComponentAction<Domain>Acción para crear el dominio.
verifyActionComponentAction<Domain>Acción para verificar el dominio.
deleteActionComponentAction<Domain>Acción para eliminar el dominio.
associateToProviderActionComponentAction<Domain, IdentityProvider>Acción para asociar el dominio al proveedor.
deleteFromProviderActionComponentAction<Domain, IdentityProvider>Acción para quitar el dominio del proveedor.
onOpenProvider(provider: IdentityProvider) => voidIr al proveedor desde la ventana modal de configuración.
onCreateProvider() => voidNavega al flujo para crear un proveedor.
createActionType: ComponentAction<Domain>Controla el flujo de creación de dominios. Usa onAfter para hacer seguimiento de cuándo se añaden nuevos dominios.Propiedades:
  • disabled - Desactiva el botón “Add Domain”
  • onBefore(domain) - Se ejecuta antes de crear el dominio. Devuelve false para impedir su creación (p. ej., si el formato del dominio no es válido).
  • onAfter(domain) - Se ejecuta después de que el dominio se haya creado correctamente. Úsalo para mostrar una notificación o registrar el evento.
Ejemplo:
<DomainTable
  createAction={{
    onBefore: (domain) => {
      // Validar el formato del dominio
      if (!domain.domain.includes(".")) {
        alert("Please enter a valid domain");
        return false;
      }
      return true;
    },
    onAfter: (domain) => {
      analytics.track("Domain Created", { domain: domain.domain });
    },
  }}
/>

verifyActionType: ComponentAction<Domain>Controla el flujo de verificación de dominio. La verificación de dominio acredita la propiedad mediante un registro TXT de DNS.Propiedades:
  • disabled - Deshabilita el botón de verificación
  • onBefore(domain) - Se ejecuta antes del intento de verificación. Devuelve false para evitar la verificación (p. ej., para confirmar que el DNS está configurado).
  • onAfter(domain) - Se ejecuta después de verificar correctamente el dominio. Úsalo para mostrar una notificación de éxito.
Ejemplo:
<DomainTable
  verifyAction={{
    onBefore: (domain) => {
      return confirm(
        `Verify ${domain.domain}? Make sure your DNS record is configured.`,
      );
    },
    onAfter: (domain) => {
      toast.success(`${domain.domain} verified successfully!`);
    },
  }}
/>

deleteActionType: ComponentAction<Domain>Controla la eliminación de dominios. Se recomienda usar onBefore para pedir confirmación, ya que esta acción es destructiva.Propiedades:
  • disabled - Desactiva el botón de eliminar
  • onBefore(domain) - Se ejecuta antes de la eliminación. Devuelve false para impedirla (se recomienda para los cuadros de diálogo de confirmación).
  • onAfter(domain) - Se ejecuta después de que el dominio se haya eliminado correctamente. Úsalo para registrar el evento o mostrar una notificación.
Ejemplo:
<DomainTable
  deleteAction={{
    onBefore: (domain) => {
      return confirm(`Delete ${domain.domain}? This cannot be undone.`);
    },
    onAfter: (domain) => {
      analytics.track("Domain Deleted", { domain: domain.domain });
    },
  }}
/>

associateToProviderActionType: ComponentAction<Domain, IdentityProvider>Controla la asociación de un dominio verificado con un proveedor de SSO. Solo los dominios verificados pueden asociarse.Propiedades:
  • disabled - Desactiva la acción de asociación
  • onBefore(domain, provider) - Se ejecuta antes de la asociación. Devuelve false para evitarla.
  • onAfter(domain, provider) - Se ejecuta después de que el dominio se haya asociado correctamente con el proveedor.
Ejemplo:
<DomainTable
  associateToProviderAction={{
    onAfter: (domain, provider) => {
      console.log(`Associated ${domain.domain} with ${provider.name}`);
    },
  }}
/>

deleteFromProviderActionType: ComponentAction<Domain, IdentityProvider>Controla la desvinculación de un dominio de un proveedor de SSO.Propiedades:
  • disabled - Desactiva la acción de desvinculación
  • onBefore(domain, provider) - Se ejecuta antes de eliminarlo. Devuelve false para impedir la eliminación.
  • onAfter(domain, provider) - Se ejecuta después de que el dominio se haya eliminado correctamente del proveedor.

onOpenProvider / onCreateProviderType: (provider: IdentityProvider) => void / () => voidManejadores de navegación para el modal de configuración de dominio. Cuando los usuarios configuran las asociaciones de proveedor de un dominio:
  • onOpenProvider - Se llama cuando el usuario hace clic en un proveedor existente para verlo o editarlo
  • onCreateProvider - Se llama cuando el usuario hace clic para crear un proveedor nuevo
Ejemplo:
<DomainTable
  onOpenProvider={(provider) => {
    navigate(`/providers/${provider.id}`);
  }}
  onCreateProvider={() => {
    navigate("/providers/create");
  }}
/>

Props de personalización

Las props de personalización te permiten adaptar el componente a tu marca, idioma regional y requisitos de validación sin necesidad de modificar el código fuente.
PropiedadTipoDescripción
schemaDomainTableSchemaReglas de validación de URLs de dominio.
customMessagesPartial<DomainTableMainMessages>Personalizaciones de textos de i18n.
stylingComponentStylingVariables CSS y personalizaciones de clases.
schemaDefine reglas de validación personalizadas para la entrada de URL de dominio.
create.domainUrl - Validación de la URL del dominio - regex - Patrón regex personalizado
  • errorMessage - Mensaje de error personalizado
<DomainTable
  schema={{
    create: {
      domain: {
        regex: /^[a-z0-9.-]+\.[a-z]{2,}$/,
        errorMessage: "Enter a valid domain (example.com)",
      },
    },
  }}
/>

customMessagesPersonaliza todos los textos y traducciones. Todos los campos son opcionales y, si no se completan, se usarán los valores predeterminados.
header - Encabezado del componente
  • title, description, create_button_text
table - Vista de tabla
  • empty_message
  • columns.domain, columns.status
  • actions.configure_button_text, actions.verify_button_text, actions.delete_button_text
create.modal - Modal para crear un dominio
  • title
  • field.label, field.placeholder, field.error
  • actions.cancel_button_text, actions.create_button_text
verify.modal - Modal para verificar un dominio
  • title
  • txt_record_name.label, txt_record_content.label, verification_status.label
  • actions.verify_button_text, actions.done_button_text
delete.modal - Confirmación de eliminación
  • title
  • description.pending, description.verified
  • actions.cancel_button_text, actions.create_button_text
configure.modal - Configuración del proveedor
  • title, description
  • table.empty_message, table.columns.name
  • actions.close_button_text
notifications - Respuestas de la API
  • domain_create_success, domain_create_error
  • domain_verify_success, domain_delete_success
<DomainTable
  customMessages={{
    header: {
      title: "Manage Domains",
      description: "Configure and verify organization domains",
      create_button_text: "Add Domain",
    },
    table: {
      empty_message: "No domains yet. Add one to begin.",
    },
    notifications: {
      domain_create_success: "Domain added successfully!",
      domain_verify_success: "Domain verified!",
      domain_delete_success: "Domain removed.",
    },
  }}
/>

stylingPersonaliza la apariencia con variables CSS y sobreescritura de clases. Compatible con estilos según el tema.
Variables - Propiedades personalizadas de CSS
  • common - Se aplica a todos los temas
  • light - Solo para el tema claro
  • dark - Solo para el tema oscuro
Classes - Sobrescritura de clases del componente
  • 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",
    },
  }}
/>

Personalización avanzada

El componente DomainTable está compuesto por subcomponentes y hooks más pequeños. Puedes importarlos individualmente para crear flujos de trabajo de dominio personalizados si utilizas shadcn.

Subcomponentes disponibles

Para casos de uso avanzados, puedes importar subcomponentes individuales para crear interfaces de gestión de dominios personalizadas. Esto es útil cuando necesitas insertar modales específicos en distintos contextos o personalizar el diseño de la tabla más allá de lo que permiten las props.
ComponenteDescripción
DomainCreateModalModal para crear un dominio
DomainVerifyModalModal para el proceso de verificación
DomainDeleteModalModal de confirmación para eliminar
DomainConfigureProvidersModalGestionar asociaciones con proveedores
DomainTableActionsColumnBotones de acción para cada fila de dominio

Hooks disponibles

Estos hooks proporcionan la lógica subyacente sin ninguna interfaz de usuario. Úsalos para crear interfaces completamente personalizadas y aprovechar la integración con la API de Auth0.
HookDescripción
useDomainTableCapa de datos + API (obtener, crear, verificar, eliminar, asociar)
useDomainTableLogicEstado de interacción de la interfaz de usuario + manejadores (modales, notificaciones)