Saltar al contenido principal

Autenticación

Closegram admite varias formas de registrarse e iniciar sesión, todas respaldadas por Firebase Authentication: correo y contraseña, inicio de sesión con Google, inicio de sesión con Apple, y número de teléfono con un código de un solo uso por SMS (OTP). Los usuarios también pueden activar la autenticación de dos factores para mayor seguridad, y el flujo de inicio de sesión incluye restablecimiento de contraseña, verificación de correo y el registro del dispositivo para notificaciones push.

Cada propiedad tiene su propia casilla que indica si esa parte específica está completamente implementada y es funcional de extremo a extremo (frontend-nextjs + backend) — actualízalas tú mismo a medida que se complete el trabajo; esta página no las sobrescribirá.

  • Registrarse con correo y contraseña
  • Multicuenta — permanece conectado a varias cuentas en un mismo dispositivo y cambia entre ellas (agregar cuenta / cerrar sesión de una / cerrar sesión de todas); las cuentas se guardan del lado del cliente en localStorage, con el token activo reflejado para Apollo (AccountSwitcherMenu.tsx)
  • Iniciar sesión con correo y contraseña
  • Inicio de sesión con Google (vía Firebase)
  • Inicio de sesión con Apple
  • Número de teléfono + OTP (código por SMS), incluido en iOS — el backend está listo de dos formas: loginWithIdToken (Firebase Phone Auth del lado del cliente, luego se intercambia el ID token — lo que usa el cliente web actualmente) y el par directo requestPhoneOtp/loginWithPhone (SMS respaldado por Twilio, PHONE_LOGIN_PROVIDER=twilio, sin necesitar el SDK de Firebase Phone Auth del lado del cliente). Ambos tienen archivos de operación compartidos listos en packages/graphql/operations/Web/Auth/. apps/ios ya implementa el par directo de extremo a extremo (el botón de Teléfono de WelcomeView → modo teléfono de LoginViewRequestPhoneOtpUseCaseVerifyCodeViewloginWithPhone, todo el camino a través de AuthRepository/AuthService hasta las mutaciones GraphQL reales — sin ningún stub o TODO en ese camino)
  • Autenticación de dos factores mediante app autenticadora (configurar, verificar, desactivar) — ahora se exige al iniciar sesión (se requiere un código TOTP válido o un código de respaldo para completar el inicio de sesión).
  • Autenticación de dos factores mediante SMS / correo — la autoinscripción está conectada de extremo a extremo en Configuración → Seguridad: elige SMS o Correo, enableTwoFactor envía un código (SMS al número ingresado, correo a la dirección de la cuenta), verifyTwoFactorSetup lo confirma y muestra los códigos de respaldo, igual que el 2FA por app autenticadora de arriba. El inicio de sesión ya enviaba un código nuevo y lo exigía para cualquier cuenta con uno de estos métodos guardado (user_two_factor) incluso antes de que existiera la autoinscripción.
  • Ver y copiar los códigos de respaldo (se muestran al configurar el 2FA)
  • Regenerar los códigos de respaldo más adelante
  • Olvidé mi contraseña / restablecer mediante enlace por correo
  • Cambiar contraseña (con la sesión iniciada)
  • Verificación de correo
  • Inicio de sesión con passkey (WebAuthn) — registra una passkey en Ajustes → Seguridad e inicia sesión con Face ID / Touch ID / una llave de seguridad. En la pantalla inicial, al escribir un correo/usuario y pulsar Continuar se comprueba en silencio si esa cuenta tiene una passkey: si la tiene, aparece el diálogo de passkey del sistema operativo; si no la tiene, pasa directo al paso de la contraseña (sin un diálogo confuso del sistema para quienes no tienen passkey). Basado en @simplewebauthn y el resolver webauthn.
  • Registro del token del dispositivo para notificaciones push, incluido en iOS — el backend está completamente construido y listo (mutation registerDeviceToken, device-token.manager.js, persistencia real, tests, y el archivo de operación compartido en packages/graphql/operations/Web/DeviceTokens/RegisterDeviceToken.graphql, así que apollo-swift ya lo tiene disponible); apps/ios ya lo llama (PushNotificationManagerDeviceTokenService.registerDeviceToken() → la mutation real, sin ningún stub o TODO en ese camino)

Consulta la referencia técnica para ver los esquemas de GraphQL, rutas, enlaces a los archivos fuente y el estado de implementación de cada campo.