Comparte una demo privada con login: control de acceso ligero

Si buscaste share a private demo with login, probablemente necesitas login en una app estática sin montar un servidor Node, configurar OAuth ni pagar una plataforma de auth completa. Las cuentas seguras (auth API) de jsdeck — también llamadas visitor auth — dan a cada app alojada sus propias cuentas email/contraseña, tokens de sesión y filas opcionales de datastore por usuario. Esta guía explica cómo funciona, muestra llamadas API reales y es honesta sobre cuándo usar Clerk, Auth0 o un backend completo en su lugar.
El caso de uso: una URL pública, audiencia privada
Quieres https://my-demo.jsdeck.com en un email al cliente — no una pantalla compartida — pero la app no debe ser visible para todo Internet. Las cuentas seguras te permiten compartir un enlace estable exigiendo login antes de que se renderice la UI de la demo.
Qué son las cuentas seguras (auth API)
La auth API de jsdeck crea cuentas seguras por app para visitantes de tu app alojada en https://your-slug.jsdeck.com. Cada cuenta es un email + contraseña limitado a ese slug de app únicamente. Tras registro o login, la API devuelve un accessToken — un token de sesión bearer (por defecto 7 días, del lado del servidor).
Esto no es tu login al panel de jsdeck. Las cuentas del panel despliegan y configuran apps; las cuentas seguras inician sesión en *tu* UI de demo o producto. Referencia completa de rutas: documentación Cuentas seguras (auth API).
Rutas HTTP auth (resumen)
Todas las llamadas usan la base apex https://jsdeck.com/api/v1 (CORS permite *.jsdeck.com). Sustituye {slug} por el nombre de tu app:
| Method | Path | Purpose |
|---|---|---|
| POST | /public/apps/{slug}/users/register | Create account (email, password min 8 chars) |
| POST | /public/apps/{slug}/users/login | Sign in — returns accessToken, expiresAt, user |
| GET | /public/apps/{slug}/users/me | Current user — Authorization: Bearer <session token> |
| POST | /public/apps/{slug}/users/logout | Revoke session |
| POST | /public/apps/{slug}/users/forgot-password | Send reset email |
| POST | /public/apps/{slug}/users/reset-password | Complete reset with token + newPassword |
Especificación OpenAPI: /tenant-auth-api.yaml.
Ejemplo: login desde tu frontend estático
const API = 'https://jsdeck.com/api/v1';
const SLUG = 'your-app';
async function login(email, password) {
const res = await fetch(`${API}/public/apps/${SLUG}/users/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, password }),
});
if (!res.ok) throw new Error('Invalid email or password');
const { accessToken, user } = await res.json();
sessionStorage.setItem('sessionToken', accessToken);
return user;
}
async function currentUser(token) {
const res = await fetch(`${API}/public/apps/${SLUG}/users/me`, {
headers: { Authorization: `Bearer ${token}` },
});
return res.ok ? (await res.json()).user : null;
}
Guarda el token de sesión como una cookie de sesión — solo HTTPS, evita registrarlo en logs. El paquete @jsdeck/toolkit encapsula registro, login y llamadas al datastore con configure({ tenantUserToken }).
Restringir una demo tras login (sin código backend)
Tu bundle estático puede mostrar un formulario de login hasta que exista un token de sesión válido:
// Pseudocode — adapt to React, Vue, Svelte, etc.
const token = sessionStorage.getItem('sessionToken');
async function boot() {
if (!token) {
renderLoginForm({ onSuccess: (t) => { sessionStorage.setItem('sessionToken', t); boot(); } });
return;
}
const user = await currentUser(token);
if (!user) {
sessionStorage.removeItem('sessionToken');
boot();
return;
}
renderYourApp(user); // demo visible only after auth
}
El HTML alojado sigue siendo público — tú decides en el código cliente qué renderizar antes del login. Para una vista previa de cliente, crea una cuenta demo compartida o registra cuentas separadas por stakeholder.
Datos privados por usuario (filas owner)
Auth se combina con el datastore JSON opcional. Tras el login, haz PUT de registros con visibility: "owner" para que solo el token de sesión de ese usuario pueda leerlos o escribirlos — la clave store_ compartida no puede. Las listas omiten filas owner salvo que la petición incluya un token de sesión válido. Consulta la documentación de filas owner para usar la clave del datastore junto con un token de sesión.
Restablecimiento de contraseña
Llama a forgot-password con el email del usuario y opcionalmente redirectPath (p. ej. "/reset-password") para que el enlace de reset se abra en tu app alojada. Tu página de reset lee ?token= de la URL y hace POST a reset-password con newPassword. Usa reset-password/status?token= para mostrar «enlace caducado» antes de pedir una nueva contraseña.
Límites y cuándo la auth API no basta
La auth de jsdeck encaja con email/contraseña por app, demos restringidas y filas JSON owner. No incluye login social/OAuth, MFA, SAML/SSO, roles de organización, registros de auditoría ni certificaciones de cumplimiento. Las apps tienen un límite de 5.000 cuentas seguras por app — más que suficiente para demos y productos pequeños. ¿Necesitas inicio con Google, SSO empresarial o RBAC granular? Usa Clerk, Auth0 o Supabase Auth y mantén jsdeck solo para hosting estático. Consulta qué cubre la auth API para el alcance.
Flujo práctico de vista previa para cliente
- Despliega el último build en jsdeck
- Añade una pantalla mínima de login/registro (email + contraseña)
- Al cargar, llama a
GET /users/me; si falla, muestra solo el formulario de login - Opción A — usuario demo compartido: regístrate una vez (
[email protected]) y comparte esas credenciales con el cliente - Opción B — cuentas por viewer: deja que cada stakeholder se registre con su email en la primera visita
- Opcionalmente guarda notas específicas del cliente en filas owner del datastore para que los datos sigan siendo privados por login
Envía el enlace pronto; rota la contraseña de demo o desactiva cuentas desde la lógica de tu app si las credenciales se filtran.
Para quién es y cuándo no usar auth jsdeck
Buen encaje: demos restringidas, vistas previas de cliente, apps de hackathon, MVPs y JSON por usuario mediante filas owner.
No encaja: login solo OAuth, requisitos MFA, SSO empresarial, roles complejos o cargas de identidad reguladas — usa Clerk, Auth0 o Supabase Auth en su lugar.
Preguntas frecuentes
¿Es realmente gratis share a private demo with login?
Sí. jsdeck ofrece hosting estático gratuito con HTTPS. Las cuentas seguras (auth API) y el datastore opcional están incluidos para la escala típica de demos y side projects — sin tarjeta de crédito para empezar.
¿Son las cuentas seguras lo mismo que mi login al panel de jsdeck?
No. Tu cuenta del panel despliega apps en jsdeck.com. Las cuentas seguras son usuarios finales que inician sesión en *tu* app en your-slug.jsdeck.com mediante la auth API.
¿Pueden los visitantes iniciar sesión con Google o GitHub?
Por ahora no — solo email y contraseña. Para login social o SSO, usa un proveedor de identidad dedicado. Consulta qué cubre la auth de jsdeck y el hub de comparativas para saber cuándo encaja mejor otra plataforma.
Próximos pasos
- Explora más guías en el hub de visitor auth
- Sigue la guía de primeros pasos para desplegar tu primera app
- Lee Cuentas seguras (auth API) para la documentación completa de rutas y OpenAPI