¿Activado el inicio de sesión automático para la comunidad pública?

He notado algunas publicaciones sobre esto, y la mayoría dice que es una función solo disponible para comunidades cerradas Inicio de sesión automático con el plugin OpenId Connect y AWS Cognito - support - Discourse Meta

Cómo iniciar sesión automáticamente a un usuario en la vista web de la aplicación - dev / sso - Discourse Meta

Esperamos tener una comunidad donde solo se obtenga una cuenta como parte de nuestro proceso de registro de productos, pero queremos que el contenido del foro sea visible para que, si las personas intentan autoayudarse a través de Google, puedan obtener un resultado apropiado sin estar autenticadas. (también para que podamos alcanzar algunos objetivos de SEO para nuestro contenido)

¿Es esto posible o es un sueño imposible? Parece que no soy la primera persona en hacer esta pregunta o desear esta capacidad de producto.

edición: En particular, me refiero a este aspecto específico de la especificación OIDC - Auto-sign-in with the OpenId Connect Plugin and AWS Cognito - #8 by david

Entonces, ¿el problema es que algunos usuarios iniciarán sesión en tu Cognito y no quieres que reciban un cuadro de diálogo de inicio de sesión si intentan responder? Pensé que con Discourse Connect ese era el comportamiento predeterminado.

Puedes hacer que el sitio esté abierto a usuarios anónimos y a Google.

2 Me gusta

En un mundo ideal, un usuario que ve Discourse y tiene una cuenta debería iniciar sesión en todo momento, de esta manera podemos capturar todos sus datos de visualización. Haré que si un usuario del producto hace clic en un enlace del producto para ver la comunidad, se autenticará, así como cualquier enlace que el usuario solo deba ver si está autenticado en otro lugar (página de cuenta, por ejemplo).

Sin embargo, si un usuario intenta autoayudarse a través de Google y termina en la comunidad, no podemos capturar esos datos hasta que intente interactuar directamente con la comunidad, incluso si está autenticado en otro lugar de nuestro sistema. Parece que la única forma de resolver eso es habilitar la configuración del sitio login_required, que, si entiendo correctamente, efectivamente hace que el sitio sea privado.

Gracias. No lo sabía. Soy un CM que intenta comprender todos los entresijos de tres productos separados y me está derritiendo el cerebro intentar asimilar los detalles de cada uno. Espera ver algunas publicaciones más mías intentando resolver todo, y te agradezco tu paciencia.

2 Me gusta

En el caso general, eso será imposible (¿cómo puedes saber si un usuario anónimo tiene una cuenta sin pedirle que inicie sesión?). Sin embargo, debería ser posible detectar si un usuario ya tiene una sesión activa en tu sitio SSO.

Ese tema es bastante antiguo, pero creo que el principio aún debería aplicarse. Básicamente, agrega una URL con el soporte CORS apropiado que devuelva una respuesta JSON indicando si el usuario tiene una sesión activa. Luego, agrega algo de JS a tu tema de Discourse que consulte esa URL y active el proceso SSO si existe una sesión activa.

2 Me gusta

Me temo que la respuesta general sigue siendo en gran medida la misma que la última vez

La especificación de la que hablaba es OpenID Connect Session Management. Desafortunadamente, esa solución basada en iframe es cada vez menos útil porque muchos navegadores ahora bloquean las cookies de terceros por defecto. Ahora solo funciona de manera confiable si su proveedor de identidad y Discourse tienen el mismo ‘origen’.

Como dijo @simonk, dependiendo de su proveedor de identidad, podría ser posible implementar algo personalizado a través de un componente temático, pero no conozco ninguna solución general que podamos agregar al propio Discourse.

3 Me gusta

Pero supongo que me equivoco.

Tienes toda la razón en que al hacer clic en ‘responder’ se activará el flujo de inicio de sesión. Y si se está utilizando DiscourseConnect (o cualquier otro proveedor de inicio de sesión único), entonces se omitirá la ventana modal de inicio de sesión de Discourse :+1:

Sin embargo, creo que el OP quiere que las personas inicien sesión automáticamente, sin necesidad de hacer clic en ‘responder’ o ‘iniciar sesión’. Con ese tipo de configuración, sería totalmente transparente para los usuarios moverse entre el sitio principal y la comunidad. Hemos logrado esto para un par de clientes, pero han sido implementaciones personalizadas que no se pueden generalizar fácilmente.

Para dar un ejemplo de un enfoque: si tu foro está en forum.example.com y tu sitio principal está en example.com, entonces el foro puede leer las cookies de example.com. Por lo tanto, un componente temático puede verificar la existencia de una cookie y hacer algo como esto:

const cookie = require("discourse/lib/cookie").default;
if(cookie('name_of_example_com_auth_cookie') && !api.getCurrentUser()){
  // El usuario tiene una cookie de autenticación para example.com. Casi con certeza
  // ha iniciado sesión allí, así que ejecutemos el flujo de autenticación
  window.location = "https://forum.example.com/auth/oidc"
}

(se aplican varias condiciones aquí. por ejemplo, la cookie no debe ser http_only, no debe ser una cookie solo de host, etc.)

5 Me gusta

Ese es, de hecho, el caso. Es bueno saber que es posible, pero es personalizado.

Además, dado que no sabía que un usuario al hacer clic en responder omitiría el diálogo de inicio de sesión dependiendo de la implementación, eso aliviará muchas de mis preocupaciones en primer lugar. Esa es la principal barrera de entrada que quiero evitar, y me alegra que se pueda implementar.

Por supuesto, el nerd de datos que hay en mí quiere la versión ideal, y es posible que aspiremos a ella. Saber que es posible por ahora es suficiente. Gracias una vez más a todos por su tiempo.

2 Me gusta

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