Condiciones de autenticación personalizadas

Existen varias formas en que un usuario puede iniciar sesión, y resulta difícil agregar condiciones mediante un plugin que el usuario deba cumplir antes de poder iniciar sesión.
Algunos ejemplos de condiciones que un autor de plugins podría desear añadir a la autenticación:

  • Asegurar que el dominio del correo electrónico del usuario siga un patrón determinado, por ejemplo, universidad.edu
  • Validar el segundo factor de un proveedor de 2FA (parece haber varios)
  • Asegurar que el usuario tenga una suscripción activa a través de un proveedor de pagos

Las condiciones actuales se verifican (o no) de manera diversa según el contexto (lista no exhaustiva):

  • Session Controller

    • mediante el método create: contraseña correcta, usuario aprobado, usuario activo, correo electrónico del usuario confirmado, segundo factor TOTP, usuario suspendido, dirección IP correcta/incorrecta
    • mediante el método email_login: segundo factor TOTP, usuario aprobado, usuario suspendido, dirección IP correcta/incorrecta
  • Users Controller

    • mediante logon_after_password_reset: usuario aprobado (tenga en cuenta que esto se verifica con una nueva instancia de Guardian), el usuario es personal
  • Invites Controller

    • mediante perform_accept_invitation: usuario activo

Una forma de insertar una condición personalizada es prependear un módulo personalizado que modifique cada método, lo cual no es un resultado deseable desde la perspectiva de mantener la compatibilidad con Discourse y, además, es bastante poco elegante.

Sugerencia
Sería más fácil desarrollar en torno a la autenticación si estuviera menos distribuida en toda la base de código. Todas las condiciones (y los mensajes de error correspondientes) que se puedan desear verificar podrían definirse como métodos separados en un solo lugar. Un usuario que desee iniciar sesión tendría que cumplir cada condición habilitada. Como autor de un plugin, podrías agregar tus propios métodos a esta clase, los cuales el método log_on_user verificaría. Si quisieras omitir una condición en algún contexto específico, podrías pasar un parámetro para hacerlo.

Esto se puede hacer mediante la configuración del sitio “lista blanca de dominios de correo electrónico”.

4 Me gusta