Saltar al contenido principal

Verificacion-emails

Ver en Git


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_code es 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/json con un username
    • {"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 verificado
  • ACCOUNTS_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ó