Generar Token de Acceso al Portal
Exportar contenido
Crea un enlace unico y seguro para que el cliente acceda a su portal y vea sus facturas, presupuestos y albaranes.
- Localiza el cliente en la lista.
- Clic en el icono de ojo (Ver) — se abre la vista de detalle.
- Seccion “Portal del Cliente” → Clic en “Generar Enlace”.
- Confirma el email del cliente (obligatorio para verificacion).
- Clic en “Generar” — se crea el token y el enlace.
- Copia el enlace con el boton “Copiar” y envialo al cliente por email, WhatsApp, etc.
Caracteristicas del token
Sección titulada «Caracteristicas del token»| Caracteristica | Descripcion |
|---|---|
| Unico por cliente | Un token por cliente (regenerable) |
| Verificacion obligatoria | Requiere verificacion por email en primer acceso |
| Estado configurable | Activo / Inactivo (puedes desactivar sin eliminar) |
| Expiracion configurable | Por defecto: sin expiracion (o segun configuracion) |
| Regenerable | Puedes generar un nuevo token en cualquier momento (invalida el anterior) |
Formato del enlace
Sección titulada «Formato del enlace»https://tudominio.com/portal/cliente-slug?t=TOKEN_UNICOEjemplo real:
https://facturik.com/portal/acme-software?t=abc123def456ghi789Como se que lo hice bien
Sección titulada «Como se que lo hice bien»- El enlace aparece en el modal con boton de copiar.
- Toast de confirmacion: “Enlace generado” o “Configuracion actualizada”.
- En la lista de clientes, el badge “Portal” aparece junto al nombre del cliente.
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa | Solucion |
|---|---|---|
| ”Email requerido” | Cliente sin email registrado | Edita el cliente y anade email antes de generar token |
| ”Error al generar token” | Error de servidor | Reintenta o contacta soporte |
🔧 Detalles Tecnicos — Generar Token Portal
Tablas involucradas:
| Tabla | Columnas clave | FK |
|---|---|---|
customer_portal_tokens | id, customer_id, token, requires_email_verification, is_active, expires_at, created_at, updated_at | customers |
Generacion de token:
- Funcion RPC:
get_or_create_customer_portal_token(p_customer_id, p_requires_verification) - Token: UUID v4 (32 caracteres hexadecimales)
- Verificacion: SIEMPRE
truepor seguridad
Logica:
- Si existe token activo → retorna token existente
- Si NO existe → INSERT nuevo token
- Retorna:
{ token_id, token, is_new }
Queries de diagnostico:
-- Token activo por clienteSELECT * FROM customer_portal_tokensWHERE customer_id = '<customer_id>' AND is_active = true;
-- Tokens por negocioSELECT c.name, t.token, t.is_active, t.created_atFROM customer_portal_tokens tINNER JOIN customers c ON c.id = t.customer_idWHERE c.business_id = '<business_id>';
-- Desactivar tokenUPDATE customer_portal_tokensSET is_active = falseWHERE customer_id = '<customer_id>';Componente:
PortalTokenGenerator.tsx- Props:
customerId,customerEmail,customerName,customerSlug - Hook:
loadExistingToken()— Verifica si ya existe token
URL del portal:
- Formato:
${window.location.origin}/portal/${customerSlug}?t=${token} - Slug: Generado desde nombre del cliente (minusculas, sin espacios)
Seguridad:
- Verificacion email: Codigo OTP enviado al email del cliente
- Token expirable: Configurable en tabla (campo
expires_at) - Logs de acceso: Tabla
customer_portal_access_log