Verificacion-emails
Email Verification
Cuando un usuario se da de alta mediante el formulario de registro, su email/cuenta/login queda pendiente de verificación.
En ciertos casos el mail se considera como verificado, ya que se le envía al mismo un correo con información de acceso, lo que vale como verificación:
- se invita a un usuario a un espacio
- se invita a un usuario personal mediante el compartido de un lote/campo
- se invita a un usuario mediante token de MemberGetMember
- se da de alta mediante Google, Nidera, etc
En los espacios que tienen el registro externo habilitado, hay dos opciones:
- Si el usuario se da de alta utilizando un
signup_invitation_code, se lo considera como verificado, ya que se asume que el usuario recibió el código a través de algún administrador. - Si el usuario se da de alta sin
signup_invitation_code, se realiza la verificación de email como si se tratase de un usuario personal.
Base de datos
El estado de verificado o no lo dictamina la columna verified de la tabla login.
En la tabla email_verification se registran todos los intentos de verificación de logins.
Funcionamiento
Si el login no se encuentra verificado (tabla login), se puede crear un intento de verificación.
Este intento consiste en un link con un verification_code que se envía por email.
- Tiene una fecha de expiración, 48hs luego de ser creado, a partir de la cual no sirve más.
- Se puede utilizar una única vez.
- Hay un rate limit de 5 minutos entre intentos.
- Si se generan múltiples intentos, sólo el último
verification_codees válido.
En caso de querer forzar la verificación, simplemente se puede cambiar verified.
Margen sin verificación
Para no dañar el flujo de creación de usuarios, se permite que un usuario utilice la plataforma sin verificar el correo por X horas desde la creación de su primer usuario . Luego de ese tiempo, no se le permitirá loguearse y si tiene un sesión ya abierta, debemos bloquearle la interfaz para que realice la verificación.
2024-01-10: Ese tiempo, en principio lo setearemos en 48hs
Usuarios ya existentes
Al momento de deploy, para los usuarios ya existentes se considerarán verificados sus emails. Serán logins verificados que no tienen hecho ningún intento.
APIs
Getuserdata
En el endpoint de /getuserdata se agrega en la respuesta la key "verified_email": true | false para indicar el estado.
En caso de ser false, se debe avisar al usuario que está pendiente y bloquear en caso que se haya acabado el margen sin verificación.
chequear estado de verificación
GET /api/auth/email_verification
Endpoint para obtener información acerca del estado de verificación.
Respuesta:
{"info": "ok", "data": {"remaining_seconds": 2500}}
Si los segundos restantes son 0, significa que se debe bloquear al usuario.
Errores:
"code": "EMAIL_VERIF_ALREADY_DONE": en caso que el email se encuentre verificado
nuevo intento de verificación
POST /api/auth/email_verification
Endpoint para crear un nuevo intento de verificación, tanto desde dentro de la plataforma como desde fuera.
Se puede utilizar de dos maneras:
- con un usuario logueado
- pasando un body
application/jsoncon unusername{"username": "fake@email.com"}
Respuesta:
{"info": "ok"}
Errores:
"code": "EMAIL_VERIF_ERROR": no se puede crear. probablemente un login inexistente (no explicar esto al usuario)."code": "EMAIL_VERIF_ALREADY_DONE": en caso que el email se encuentre verificado"code": "EMAIL_VERIF_RATE_LIMIT": debe esperar 5 minutos entre intentos. El body incluye"data": {"available_in": 150}con los segundos restantes hasta el próximo intento
login
En el endpoint utilizado para loguearse, /auth, si se pasó el margen de tiempo de verificación, arrojará un nuevo error:
"code": "EMAIL_VERIF_PENDING": en caso que sea necesario verificar el email para continuar
signup
Si el margen de tiempo de verificación fuera 0, la api de creación de usuario arrojaría error de EMAIL_VERIF_PENDING al terminar, ya que exigirá la verificación inmediatamente.
callback
Cuando el usuario ingresa al link enviado por email, una api redirige al usuario al accounts con el resultado de la operacion, para que se muestre un modal con información:
ACCOUNTS_URL ? email_verification=OK: email verificadoACCOUNTS_URL ? email_verification=EMAIL_VERIF_INVALID: el código es invalido (no explicar mucho mas)ACCOUNTS_URL ? email_verification=EMAIL_VERIF_EXPIRED: el codigo expiró