Skip to Content

Autenticacion

GoConverso usa Supabase Auth  para toda la autenticacion. Esto te brinda sesiones basadas en JWT, multiples proveedores OAuth y acceso seguro a nivel de fila a tus datos.

Metodos de autenticacion

GoConverso soporta los siguientes metodos de autenticacion:

MetodoDescripcionMejor para
Email y contrasenaRegistro e inicio de sesion tradicionalLa mayoria de los usuarios
Google OAuthInicio de sesion con un clic usando GoogleIncorporacion rapida
OTP (Contrasena de un solo uso)Enlace magico o codigo de 6 digitos por emailAcceso al portal del cliente
Clave API + JWTAcceso programaticoIntegraciones servidor a servidor

Claves API

Cada proyecto de GoConverso tiene dos claves API:

Clave anonima (publica)

La clave anonima es segura para usar en codigo del lado del cliente. Respeta las politicas de Seguridad a Nivel de Fila (RLS), lo que significa que los usuarios solo pueden acceder a los datos que estan autorizados a ver.

apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Clave de rol de servicio (secreta)

La clave de rol de servicio omite todas las politicas RLS y otorga acceso completo a la base de datos. Usala solo en codigo del lado del servidor, edge functions o entornos backend seguros.

Nunca expongas la clave de rol de servicio en codigo del lado del cliente. Esta clave tiene acceso irrestricto a toda tu base de datos, incluyendo todos los datos de usuario. Almacenala en variables de entorno y usala solo en contextos del lado del servidor.

Tokens JWT

Cuando un usuario inicia sesion, Supabase emite un JSON Web Token (JWT) que contiene el ID del usuario, email y metadatos. Este token se usa para autenticar las solicitudes posteriores a la API.

Estructura del token

Un JWT decodificado de GoConverso contiene:

{ "sub": "550e8400-e29b-41d4-a716-446655440000", "email": "user@example.com", "role": "authenticated", "aud": "authenticated", "exp": 1706540400, "iat": 1706536800, "user_metadata": { "full_name": "Maria Silva", "username": "mariasilva", "niche": "barber" } }

Ciclo de vida del token

EventoComportamiento
Inicio de sesionSe emiten token de acceso + token de actualizacion
El token de acceso expiraSe actualiza automaticamente usando el token de actualizacion (predeterminado: 1 hora)
El token de actualizacion expiraEl usuario debe iniciar sesion nuevamente (predeterminado: 7 dias)
Cierre de sesionAmbos tokens se invalidan

Autenticacion de solicitudes

Cada solicitud a la API debe incluir dos encabezados:

curl -X GET "https://<project-id>.supabase.co/rest/v1/bookings" \ -H "apikey: <your-anon-key>" \ -H "Authorization: Bearer <jwt-access-token>" \ -H "Content-Type: application/json"
  • apikey — identifica tu proyecto (usa la clave anonima)
  • Authorization — identifica al usuario autenticado (usa el token de acceso JWT)

Registro con email y contrasena

Crear la cuenta de usuario

const { data, error } = await supabase.auth.signUp({ email: 'newuser@example.com', password: 'secure-password-123', options: { data: { full_name: 'New User', username: 'newuser', niche: 'personal_trainer' } } })

Manejar la respuesta

En caso de exito, la respuesta incluye el nuevo objeto de usuario y una sesion:

{ "user": { "id": "550e8400-e29b-41d4-a716-446655440000", "email": "newuser@example.com", "user_metadata": { "full_name": "New User", "username": "newuser", "niche": "personal_trainer" } }, "session": { "access_token": "eyJhbGciOiJIUzI1NiIs...", "refresh_token": "v1.MjA5Nj...", "expires_in": 3600 } }

Creacion automatica de perfil

GoConverso crea automaticamente una fila en profiles cuando un nuevo usuario se registra. Esto se maneja mediante un trigger de base de datos, por lo que no se necesita una llamada API adicional.

Iniciar sesion con email y contrasena

const { data, error } = await supabase.auth.signInWithPassword({ email: 'user@example.com', password: 'secure-password-123' }) if (error) { console.error('Sign in failed:', error.message) return } // Token de acceso para solicitudes a la API const accessToken = data.session.access_token

OAuth con Google

GoConverso soporta Google OAuth para inicio de sesion con un clic. Este es el metodo recomendado para la experiencia de incorporacion de usuario mas rapida.

Iniciar el flujo OAuth

const { data, error } = await supabase.auth.signInWithOAuth({ provider: 'google', options: { redirectTo: 'https://converso.pro/auth/callback', queryParams: { access_type: 'offline', prompt: 'consent' } } })

Manejar el callback

Despues de que el usuario autoriza tu aplicacion, es redirigido a tu URL de callback con un codigo de autorizacion. El cliente de Supabase lo intercambia automaticamente por una sesion.

// En tu pagina de callback (ej., /auth/callback) const { data: { session }, error } = await supabase.auth.getSession() if (session) { // El usuario esta autenticado console.log('Signed in as:', session.user.email) }

Acceder a Google Calendar (opcional)

Si necesitas integracion con Google Calendar, solicita alcances adicionales durante el flujo OAuth:

const { data, error } = await supabase.auth.signInWithOAuth({ provider: 'google', options: { redirectTo: 'https://converso.pro/auth/callback', scopes: 'https://www.googleapis.com/auth/calendar.events' } })

Autenticacion OTP (Portal del Cliente)

GoConverso usa autenticacion basada en OTP para el portal del cliente. Los clientes reciben un codigo de 6 digitos por email para acceder a su portal sin necesidad de contrasena.

// Solicitar OTP const response = await fetch( 'https://<project-id>.supabase.co/functions/v1/send-portal-otp', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'client@example.com', professionalId: '<professional-uuid>' }) } ) // Verificar OTP const verify = await fetch( 'https://<project-id>.supabase.co/functions/v1/verify-portal-otp', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'client@example.com', code: '123456', professionalId: '<professional-uuid>' }) } )

Los codigos OTP expiran despues de 10 minutos y solo se pueden usar una vez. Si un cliente solicita un nuevo codigo, cualquier codigo emitido previamente se invalida automaticamente.

Gestion de sesiones

La libreria cliente de Supabase maneja la gestion de sesiones automaticamente, incluyendo la actualizacion de tokens. Puedes escuchar cambios en el estado de autenticacion:

supabase.auth.onAuthStateChange((event, session) => { switch (event) { case 'SIGNED_IN': console.log('User signed in:', session.user.email) break case 'SIGNED_OUT': console.log('User signed out') break case 'TOKEN_REFRESHED': console.log('Token refreshed') break } })

Cerrar sesion

const { error } = await supabase.auth.signOut()

Mejores practicas de seguridad

  • Almacena tokens de forma segura — Usa cookies httpOnly o almacenamiento seguro. Nunca almacenes JWTs en localStorage para aplicaciones sensibles.
  • Usa la clave anonima en el cliente — La clave anonima esta limitada por politicas RLS. Nunca uses la clave de rol de servicio en codigo del navegador.
  • Valida tokens del lado del servidor — Si construyes endpoints personalizados, verifica la firma JWT usando el secreto JWT de tu proyecto.
  • Habilita RLS en todas las tablas — GoConverso tiene RLS habilitado por defecto. Nunca lo desactives sin entender las implicaciones.
  • Rota las claves periodicamente — Si sospechas que una clave ha sido comprometida, rotala inmediatamente en el panel de Supabase.

A continuacion, aprende como trabajar con Webhooks para recibir notificaciones de eventos en tiempo real.