Estoy usando un foro de Discourse como sección de comentarios para mi blog, que está en un dominio diferente.
Estoy intentando usar la incrustación de la aplicación completa de Discourse, pero los usuarios no pueden iniciar sesión, responder ni interactuar en absoluto desde la incrustación.
Cuando alguien intenta responder, se les redirige a iniciar sesión en una página nueva, incluso si ya han iniciado sesión.
Iniciar sesión allí no ayuda.
Parece que es un problema con las cookies entre sitios.
¿Hay alguna solución?
¿Algún arreglo?
Lo siento, no estoy muy familiarizado con todo lo de las cookies, así que usé IA para entender qué está pasando e investigar posibles soluciones.
Si no te gusta la IA, puedes detenerte aquí.
Pongo abajo lo que obtuve de ellos, pero este post en sí, incluido todo el formato, fue escrito usando mi Inteligencia Natural.
Cómo Gemini resumió el problema.
Gemini:
La incrustación de la “Aplicación completa” no reconoce las sesiones de usuario activas cuando el foro y el sitio utilizan dominios diferentes.
Esto sucede porque el navegador trata al foro incrustado como un rastreador de terceros.
Los navegadores modernos bloquean las cookies de terceros por defecto para proteger la privacidad del usuario.
Las cookies de sesión de Discourse están configuradas como SameSite=Lax.
Los navegadores no enviarán cookies Lax dentro de un iframe si el dominio padre es diferente.
Como las cookies están bloqueadas, el foro no puede ver los datos de inicio de sesión del usuario.
La incrustación pasa por defecto al modo “Invitado” y abre una nueva pestaña cuando el usuario intenta interactuar.
Soluciones obvias como poner el host en la lista blanca en la configuración de Discourse no funcionan.
Poner en la lista blanca solo le dice a Discourse que permita la conexión; no puede anular las reglas de seguridad del navegador.
Actualizar la página o volver a iniciar sesión en una nueva pestaña también falla porque el bloqueo a nivel de navegador sigue activo para el iframe.
La incrustación esencialmente queda atrapada en un entorno aislado sin cookies.
Parece que hay formas correctas de hacer esto, pero Discourse tendría que implementarlas.
Modo de Búsqueda con IA de Google:
Sí, existen métodos oficialmente soportados y seguros, pero la “vieja forma” (simplemente establecer una cookie) ha quedado obsoleta.
Para persistir un inicio de sesión en un iframe hoy en día, debes usar una de las siguientes tres “normas oficiales” del navegador. La que elijas depende enteramente de quién necesita ver la sesión de inicio de sesión.
1. El método del “Tarro Privado”: CHIPS
Mejor para: Widgets de chat, mapas incrustados o formularios de pago que necesitan mantenerse iniciados en sesión solo en este sitio padre específico.
Cómo funciona: Estableces una cookie con el atributo Partitioned.
Set-Cookie: session_id=xyz; Secure; SameSite=None; Partitioned;
El resultado: El navegador crea un “tarro de cookies” único para tu iframe que está indexado por (Tu Dominio + Dominio de la Página Padre).
Ventajas: Funciona automáticamente sin pedir permiso al usuario.
Desventajas: La sesión no se comparte. Si el usuario visita tu sitio directamente en una nueva pestaña, no estará iniciado en sesión allí. Solo estará iniciado en sesión dentro de ese contexto de incrustación específico.
2. El método de “Sesión Compartida”: API de Acceso al Almacenamiento (SAA)
Mejor para: Cuando necesitas que el iframe vea la misma sesión de inicio de sesión que la pestaña principal del usuario (por ejemplo, un widget “Comentar como [Usuario]”).
Cómo funciona: El iframe no puede leer sus propias cookies inicialmente. Debe llamar a una API de JavaScript específica para solicitar acceso:
document.requestStorageAccess().then(() => {
// ¡Ahora puedes leer tus cookies entre sitios!
});
El problema: Esto requiere una acción del usuario (como un clic). Típicamente tienes que renderizar primero un botón de “Haz clic para conectar”. Una vez hecho clic, el navegador puede pedir al usuario (“¿Permitir que [iframe] use cookies?”).
Ventajas: Otorga acceso a tus cookies globales “reales”.
Desventajas: Alta fricción; requiere interacción del usuario/ventanas emergentes.
3. El método de “Transferencia de Tokens” (Más común)
Mejor para: Aplicaciones SaaS que incrustan sus propias herramientas en los paneles de control de los clientes.
Cómo funciona: No dependes en absoluto de las cookies del iframe.
La página padre maneja el inicio de sesión (o ya tiene el token).
La página padre pasa el token de autenticación (JWT) al iframe mediante postMessage.
El iframe captura el token y lo almacena en memoria (o en sessionStorage) para adjuntarlo a las solicitudes de API.
Ventajas: Cero dependencia de las políticas de cookies del navegador; completamente compatible entre navegadores.
Desventajas: Requiere cambios de código tanto en la página padre como en el sitio del iframe.
Recomendación de resumen
Si necesitas…
Usa…
Inicio de sesión aislado (El estado del widget no necesita coincidir con el sitio principal)
CHIPS (Cookies Particionadas)
Inicio de sesión global (El usuario ya ha iniciado sesión en tu sitio en otro lugar)
API de Acceso al Almacenamiento
Control (Tú eres dueño tanto del sitio padre como del iframe)
Transferencia de Tokens (postMessage)
Lilly
(Lillian )
5 Mayo, 2026 00:01
2
Dev-in-the-BM:
Estoy intentando usar la aplicación completa de Discourse incrustada, pero los usuarios no pueden iniciar sesión, responder ni interactuar en absoluto desde la incrustación.
Cuando alguien intenta responder, se le redirige a iniciar sesión en una nueva página, incluso si ya ha iniciado sesión.
¿Tu Discourse está actualizado? Asegúrate de actualizar a la última versión. Yo no tengo problemas para responder cuando estoy conectado al foro correcto.
Responder como anónimo abre una nueva pestaña para iniciar sesión, como se explica aquí:
Falco
(Falco)
5 Mayo, 2026 00:35
3
Accede a la consola de Rails y establece la cookie de sitio en None.
cd /var/discourse
./launcher enter app
rails c
SiteSetting.same_site_cookies = "None"
Sí.
¿Dentro del mismo dominio o entre sitios diferentes?
Dev-in-the-BM:
Cuando alguien intenta responder, se le redirige para iniciar sesión en una página nueva, incluso si ya ha iniciado sesión.
Iniciar sesión allí no ayuda.
Lo pensé, pero eso es muy inseguro; obviamente, no es una buena idea.
Solo una nota: la persona que sugirió eso fue quien ayudó a crear la función .
RGJ
(Richard - Communiteq)
5 Mayo, 2026 07:46
7
La incrustación entre dominios tampoco siempre es la mejor idea, pero bueno.