Iniciar sesión automáticamente en el sitio web de Discourse

¿Qué te gustaría que se hiciera?

Tengo una aplicación móvil. Discourse es mi fuente de autenticación. Para iniciar sesión en la aplicación móvil, el usuario debe escribir su nombre de usuario y contraseña. Luego, realizaré una llamada a la API de inicio de sesión en Discourse para autenticar al usuario.

Ahora hay algunos enlaces en la aplicación móvil que llevan al foro de Discourse. Quiero que el usuario inicie sesión automáticamente en el foro al hacer clic en los enlaces. Es una muy mala experiencia de usuario que los usuarios tengan que escribir sus contraseñas dos veces: la primera al iniciar sesión en la aplicación y la segunda al querer iniciar sesión en el foro.

Dado que el inicio de sesión sin contraseña mediante un enlace enviado al correo electrónico del usuario es posible, creo que este procedimiento también debería ser posible. Quizás con un plugin sencillo.

¿Cuándo lo necesitas hecho?
1 semana.

¿Cuál es tu presupuesto, en dólares estadounidenses, que puedes ofrecer por esta tarea?
300 $

2 Me gusta

¿Esto no es posible? ¿O la oferta es baja? :thinking:

¡Hola :slight_smile:

En realidad, esto es un poco más complejo de lo que parece.

El funcionamiento del inicio de sesión por correo electrónico es el siguiente: cuando haces clic en el botón “con correo electrónico” en el modal de inicio de sesión, se genera un token específico para ese usuario y se almacena en email_tokens. Puedes ver ese token en el enlace (la cadena de números y letras):

http://localhost:3000/session/email-login/69c4953ff0726b5f4c2b26c1e3563b79

Tendrías que generar este token para los enlaces de tu aplicación cada vez que el usuario inicie sesión en ella. No creo (?) que esta funcionalidad esté expuesta actualmente a través de la API, por lo que primero necesitarías configurar un endpoint.

Ese endpoint tendría que estar protegido por autenticación. Necesitarías una forma de manejar eso en tu aplicación. ¿Quizás ya lo tienes?

Luego, tendrías que considerar aspectos como la expiración del token. ¿Cuánto tiempo debe permanecer válido el token? ¿Cómo se obtiene uno nuevo y se actualizan los enlaces una vez que expira?

Siento que debería haber una mejor manera de abordar este problema que adaptar esta función de forma retroactiva.

Sí. Justo estaba pensando en esto yo mismo. Y como el inicio de sesión con correo electrónico ya está implementado, también debería ser posible. No sé sobre la implementación real. Quizás debería hacerse mediante un plugin. Si puedes hacerlo, avísame.

Sí, la autenticación se realiza mediante la API de inicio de sesión de Discourse. No hay ningún problema con eso.

¿El enlace de inicio de sesión con correo electrónico tiene un valor de caducidad? Podríamos usar lo mismo o algo similar.
Otros aspectos, como obtener un nuevo token, serán gestionados por la propia aplicación.

Sí, la expiración del token de correo electrónico está determinada por la configuración del sitio “horas de validez del token de correo electrónico”.

Básicamente, ¿quieres un plugin que agregue un punto de conexión para crear y devolver un email_token para un usuario y lo llamarás periódicamente cuando los tokens expiren?

Eso funcionará para mí.

Y también, como quiero enviar al usuario a un tema específico, si se pudiera añadir el ID del tema o el enlace, y después del inicio de sesión el usuario fuera redirigido allí, sería perfecto.

¿Sería otro enfoque hacer que los enlaces en la aplicación apunten a tu propio backend? Al hacer clic en ellos, en ese momento se crearía un enlace apropiado y el cliente sería redirigido, de alguna manera, para ir al lugar correcto.
Esto significaría que no necesitas generar enlaces de autenticación antes de que un usuario haga clic en ellos.

1 me gusta

Sí, eso probablemente sea más eficiente en el lado de la aplicación. Creo que el punto de conexión en Discourse seguiría siendo el mismo, sin embargo.

1 me gusta

Con este enfoque, ¿cómo nos aseguramos de que el usuario esté autenticado?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.