Vibe Coding — tu primera app sin saber programar — 6. Cuentas de usuario y conexión

20 min read min de lecture
Capítulo 06

Cuentas de usuario y conexión

Capítulo 6 de 10 · 60%

Objetivos de este capítulo

  • Comprender cuándo una cuenta de usuario se vuelve realmente necesaria
  • Elegir un método de conexión adaptado a tus usuarios
  • Integrar la autenticación mediante un servicio listo para usar, sin programar

El mensaje que lo cambia todo

Una semana después de la puesta en línea, Tom recibe el comentario que más se repite. Lina, una alumna de 1.º de ESO, le escribe: «¡Profe, marqué todos mis hábitos en el ordenador de la biblioteca, y por la noche en mi teléfono había desaparecido todo!». Tom lo entiende de inmediato: había elegido el almacenamiento local en el capítulo 3, y localStorage guarda los datos en el navegador de cada dispositivo. El ordenador de la biblioteca y el teléfono de Lina son dos mundos separados que no se hablan. Para que la app siga a Lina a todas partes, debe poder reconocerla — y reconocer a alguien, en la web, se llama una cuenta de usuario.

Recuerda: en el capítulo 3, «cuenta de usuario» figuraba en la lista de palabras trampa a desterrar de tu v1. No era una prohibición definitiva, era una cuestión de timing. Tom primero construyó, desplegó, y recogió comentarios reales. Ahora, la necesidad ya no es una hipótesis: es la petición número uno de sus usuarios. Es exactamente el orden correcto — la complejidad se justifica por una necesidad probada, nunca por un «por si acaso». Vas a ver que esta complejidad, bien abordada, está totalmente a tu alcance.

Autenticación: lo que pasa de verdad

Tres palabras de vocabulario van a transformar tus diálogos con la IA sobre este tema. La autenticación es probar quién eres («soy de verdad lina@instituto.es»). La sesión es seguir siendo reconocido durante un tiempo sin tener que probarlo en cada clic — es ella la que hace que no tengas que reconectarte cada treinta segundos. La autorización es lo que tienes derecho a ver o hacer una vez reconocido («Lina ve SUS hábitos, no los de los demás»). Cuando uses estas palabras en tus prompts, la IA sabrá exactamente de qué hablas.

Detrás de una simple pantalla de conexión se esconde en realidad todo un sistema: el registro, la conexión, la desconexión, la recuperación en caso de olvido, la protección contra los robots, el almacenamiento seguro de las credenciales… Construir todo eso uno mismo es largo, y sobre todo peligroso: el mínimo error expone los datos de tus usuarios. La buena noticia es que hoy nadie lo construye por su cuenta — ni siquiera los profesionales. Todo el mundo se apoya en servicios especializados que han resuelto el problema de una vez por todas.

Si la IA te propone algún día «crear un sistema de conexión casero» con una tabla de contraseñas, recházalo educadamente y pide explícitamente un servicio de autenticación reconocido. Almacenar contraseñas uno mismo es el error de seguridad número uno de los principiantes — y es totalmente evitable.

Los servicios de autenticación listos para usar

Estos servicios se llaman a veces BaaS (Backend as a Service): proporcionan a tu app los ladrillos de servidor que necesita — entre ellos la autenticación — sin que tengas que gestionar un servidor. Creas una cuenta con ellos, recuperas dos claves, y tu app les delega todo el trabajo sensible. Tres nombres aparecen por todas partes, y la IA los conoce de memoria:

Supabaseopen source, generoso en su plan gratuito, y combina autenticación Y base de datos — práctico para el capítulo siguiente. La elección de Tom.
Firebaseel servicio de Google, muy extendido y muy documentado. Excelente también, con un ecosistema algo más orientado a Google.
Clerkespecializado al 100 % en la autenticación, con pantallas de conexión ya hechas y muy cuidadas. Ideal si quieres el resultado más bonito lo más rápido posible.

Para este curso, seguiremos a Tom con Supabase: su oferta gratuita cubre de sobra una app de clase, y el hecho de tener la autenticación y la base de datos en el mismo sitio simplificará el capítulo 7. Pero retén el principio más que el nombre — el método que vas a aprender se aplica de forma idéntica en los competidores.

¿Qué método de conexión para tus usuarios?

Existen tres grandes formas de conectarse, y la buena elección depende por completo de quiénes son tus usuarios. La contraseña clásica es universal pero penosa: la gente la olvida, la reutiliza en todas partes, y hay que gestionar la recuperación. La conexión vía Google o Apple («OAuth») es cómoda… a condición de que tus usuarios tengan una cuenta de Google que usen de verdad. El enlace mágico (magic link) elimina directamente la contraseña: el usuario introduce su email, recibe un enlace, hace clic, y ya está conectado.

  • Contraseña: universal, pero olvidos frecuentes y gestión de recuperación obligatoria.
  • Conexión Google / Apple: un clic y listo — si tus usuarios tienen (y usan) esas cuentas.
  • Enlace mágico: nada que recordar, nada que olvidar. Perfecto para usuarios ocasionales o jóvenes. Única exigencia: acceder a su buzón de correo.

Tom elige el enlace mágico: todos sus alumnos tienen una dirección proporcionada por el instituto, y «contraseña olvidada» se habría convertido en su segunda vida. Hazte la misma pregunta para tu propia app: ¿qué método crea menos fricción para TUS usuarios? No hay una respuesta buena universal, solo una respuesta buena para tu público.

sequenceDiagram
  participant E as Alumna
  participant A as App de Tom
  participant S as Servicio Supabase
  E->>A: Escribe su dirección de email
  A->>S: Solicita un enlace mágico
  S-->>E: Envía el email con el enlace
  E->>A: Hace clic en el enlace recibido
  A-->>E: Sesión abierta y hábitos mostrados
El flujo del enlace mágico: sin contraseña, solo un email y un clic.

Integrar la autenticación con la IA

El proceso cabe en tres tiempos: crear tu proyecto en Supabase (una cuenta, un clic en «New project»), recuperar tus dos claves de acceso, y luego pedir a la IA que lo conecte todo. Como con el despliegue en el capítulo 5, no tienes que memorizar el procedimiento — pides una guía paso a paso adaptada a tu nivel. Este es el prompt completo de Tom:

PROMPT
Quiero añadir cuentas de usuario a mi app de seguimiento de hábitos.
Contexto: app HTML/CSS/JS desplegada en Vercel, datos en localStorage por ahora.
Usa Supabase Auth con conexión por enlace mágico, sin contraseña.
Lo que quiero:
1. una pantalla de conexión simple: campo de email + botón «recibir mi enlace»
2. tras hacer clic en el enlace recibido por email, el usuario vuelve a la app, conectado
3. un botón «cerrar sesión» discreto en la parte superior de la página
4. si el usuario no está conectado, ve la pantalla de conexión; si no, sus hábitos
IMPORTANTE: no toques todavía los datos — mantenemos localStorage por ahora.
Guíame primero para crear el proyecto Supabase y encontrar mis dos claves, paso a paso, antes de escribir una sola línea de código.

La línea «no toques todavía los datos» es estratégica. Añadir la autenticación Y migrar los datos al mismo tiempo son dos grandes cambios de golpe — exactamente lo que el capítulo 4 te enseñó a evitar. Este capítulo conecta el reconocimiento de los usuarios; el capítulo 7 se ocupará de sus datos. Un escalón a la vez, incluso cuando la escalera es grande.

Las claves de API: tus primeros secretos

Al crear tu proyecto Supabase, vas a encontrarte con dos claves. La clave pública (llamada «anon») identifica tu app: puede vivir en el código del navegador, está pensada para eso. La clave secreta (llamada «service_role») da TODOS los derechos sobre tu proyecto: no debe aparecer nunca, jamás, en código visible por un navegador. Estos secretos se guardan en un archivo especial, el .env, que Git ignora:

bash
# Archivo .env — se queda en tu máquina, nunca se publica
SUPABASE_URL=https://tuproyecto.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIs...   # pública: OK en el navegador
SUPABASE_SERVICE_ROLE_KEY=eyJzZXJ2aWNl...   # SECRETA: nunca en el navegador
En caso de duda, hazle la pregunta tal cual a la IA: «¿esta clave puede aparecer en el código del navegador, sí o no?». Es una pregunta binaria, responderá sin ambigüedad. Volveremos a los secretos en profundidad en el capítulo 9 — por ahora, retén: la clave service_role no sale nunca del servidor.

Probar el flujo como un usuario

La autenticación se prueba de principio a fin, sin atajos: introduce una dirección real, ve a buscar el email (mira también en el spam, es el bloqueo clásico), haz clic en el enlace, verifica que llegas conectado. Luego desconéctate y vuelve a empezar. Por último, la prueba decisiva: abre la app en dos navegadores diferentes con dos direcciones diferentes, y verifica que cada uno tiene su propia sesión. Si algo falla, aplica el método del capítulo 4 — informe de bug en cuatro puntos. Aquí tienes la versión adaptada a la autenticación:

PROMPT
Bug de conexión a corregir.
Lo que hago: introduzco mi dirección, recibo el email del enlace mágico, hago clic en el enlace.
Lo que esperaba: volver a la app, conectado.
Lo que pasa: vuelvo a la app pero sigo viendo la pantalla de conexión.
Error en la consola: [pega aquí la línea roja exacta, si la hay]
Verifica en prioridad la configuración de las URL de redirección en Supabase — la URL de mi sitio desplegado es https://mi-app.vercel.app — y dime qué corregir, paso a paso.

Este prompt muestra un reflejo de nivel superior: Tom orienta el diagnóstico («verifica en prioridad las URL de redirección») porque es LA causa clásica de ese síntoma — el servicio devuelve al usuario hacia una dirección que no corresponde al sitio desplegado. No estás obligado a conocer esas causas clásicas: pregunta a la IA «¿cuáles son las tres causas más frecuentes de este problema?» y te las listará.

Las direcciones de email de tus usuarios son datos personales — tanto más sensibles cuanto que los alumnos de Tom son menores. Regla de oro: recoge solo lo estrictamente necesario (aquí, el email y nada más), y si tu app se usa en un marco escolar, habla con tu centro. La sobriedad en datos es a la vez una obligación y una protección.

Lo que te espera en el próximo capítulo

Al final de esta etapa, la app de Tom reconoce a cada alumno… pero sus hábitos siguen viviendo en el localStorage de cada dispositivo. Lina puede conectarse en la biblioteca y en su teléfono, pero todavía no ve los mismos datos. Falta la segunda mitad de la solución: una base de datos en línea, donde los hábitos de cada cuenta se almacenarán de una vez por todas, accesibles desde cualquier sitio. Ese es todo el programa del capítulo 7 — y ya has puesto la base ideal para acogerla.

🛠️ Te toca a ti

Contexto

Tom reserva una tarde para añadir la conexión por enlace mágico a su app. Su objetivo es voluntariamente limitado: al final de la sesión, un alumno debe poder conectarse y desconectarse — sin tocar los datos, que se quedan en localStorage. Haz exactamente la misma obra en tu app: es el primer ladrillo «serio» de tu recorrido, y vas a ver que es más accesible de lo que parece.

Instrucciones

  1. Crea una cuenta de Supabase (o Firebase/Clerk) y un nuevo proyecto, y localiza tus dos claves.
  2. Elige tu método de conexión según TUS usuarios: enlace mágico, contraseña o Google.
  3. Envía a la IA el prompt de integración precisando bien «no toques todavía los datos».
  4. Prueba el flujo completo: registro, email recibido (revisa el spam), conexión, desconexión, reconexión.
  5. Abre la app en dos navegadores con dos direcciones diferentes y verifica que las sesiones están bien separadas.
  6. Cuando todo funcione, haz un commit (o un punto de restauración): «autenticación funcional».
Pista — Si el enlace mágico te devuelve a la pantalla de conexión en lugar de conectarte, es casi siempre un problema de URL de redirección en la configuración de Supabase: la URL de tu sitio desplegado debe figurar ahí exactamente. Da esa pista a la IA en primer lugar.

En resumen

  • localStorage = datos por dispositivo; para seguir a un usuario a todas partes, hace falta una cuenta.
  • La complejidad de una cuenta se justifica por una necesidad de usuario probada — nunca por un «por si acaso».
  • Autenticación = probar quién eres; sesión = seguir siendo reconocido; autorización = lo que tienes derecho a ver.
  • Nunca se construye el propio sistema de contraseñas: Supabase, Firebase o Clerk se encargan.
  • El enlace mágico elimina las contraseñas: ideal para usuarios jóvenes u ocasionales.
  • Clave pública «anon»: OK en el navegador; clave «service_role»: nunca — vive en el .env.
  • Separa las obras: este capítulo conecta la autenticación, el siguiente migrará los datos.

Quiz — comprueba tu comprensión

1. ¿Por qué los datos de Lina desaparecen de un dispositivo a otro?

localStorage es local por definición: cada navegador tiene su propia copia, y nada circula entre los dispositivos. Ese es todo el problema que las cuentas + base de datos van a resolver.

2. ¿Cuál es la diferencia entre autenticación y autorización?

Primero te reconocen (autenticación), luego se aplican tus derechos (autorización): Lina ve sus hábitos, no los de los demás.

3. La IA te propone crear una tabla de contraseñas casera. ¿Qué haces?

Almacenar contraseñas uno mismo es el error de seguridad clásico del principiante. Los servicios especializados han resuelto este problema de forma segura — delégales ese trabajo sensible.

4. ¿Por qué Tom elige el enlace mágico para sus alumnos?

El buen método de conexión es el que crea menos fricción para TUS usuarios. Para alumnos de instituto equipados con un email escolar, cero contraseñas = cero «contraseña olvidada».

5. ¿Cuál de estas claves no debe aparecer NUNCA en el código del navegador?

La clave service_role da todos los derechos sobre tu proyecto. Vive en el .env, únicamente en el lado servidor. La clave anon, en cambio, está diseñada para ser visible en el navegador.

Auteur(s)

R

REHOUMA Haythem

Haythem Rehouma est un ingénieur et architecte IA et cloud, formateur et enseignant technique, avec un profil orienté IA médicale, AWS, MLOps, LLM/RAG et vision par ordinateur.