Cuando un componente de tema declara activos en su about.json, Discourse los almacena y los sirve bajo /uploads/.
Si la configuración del sitio “Evitar que los anónimos descarguen archivos” está habilitada, estos activos del tema devuelven 404 para los usuarios anónimos porque se tratan como cargas protegidas.
Esto puede romper cualquier tema o componente que cargue dinámicamente su propio JavaScript; por ejemplo, el componente Topic List Previews.
Pasos para reproducir
- Instala el componente Topic List Previews (
https://github.com/merefield/discourse-tc-topic-list-previews). - Verifica que se carga correctamente tanto para usuarios autenticados como anónimos.
- Habilita la configuración del sitio Evitar que los anónimos descarguen archivos.
- Visita la página de inicio del foro como usuario desconectado y revisa la consola del navegador.
Comportamiento observado
-
Las solicitudes de archivos como
/uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.jsdevuelven 404 No Encontrado (en realidad, una página de error HTML).
-
La consola del navegador muestra:
Refused to execute script ... because its MIME type ('text/html') is not executable -
Los componentes que dependen de ese archivo (por ejemplo,
preview-edits.gjsen Topic List Previews) fallan al ejecutarse, causando problemas de diseño.
Comportamiento esperado
Los activos del tema definidos en about.json siempre deben ser accesibles públicamente, independientemente de la configuración de “Evitar que los anónimos descarguen archivos”.
Son activos estáticos, no cargas de usuario, y no deben heredar restricciones de acceso a nivel de carga.
Detalles técnicos
-
Versión de Discourse: 3.6.0.beta2 (última)
-
Componente: Topic List Previews
-
Fragmento relevante de
about.json:"assets": { "imagesloaded": "assets/imagesloaded.js" } -
Durante la instalación del tema, Discourse almacena este archivo como una
Uploadbajo/uploads/default/original/.... -
Habilitar la restricción de anónimos hace que Discourse bloquee las solicitudes para esa ruta, a pesar de ser un activo del tema.
Resolución propuesta
Los activos del tema cargados a través de about.json deben ser:
- Servidos desde una ruta dedicada (por ejemplo,
/theme-assets/o/assets/)
o - Exentos de la restricción “Evitar que los anónimos descarguen archivos”.
Impacto
Esto afecta a cualquier tema o componente que dependa de activos del tema (JS/CSS/imágenes) cargados dinámicamente en el cliente.
Rompe componentes importantes de la interfaz de usuario para visitantes anónimos cuando la restricción de descarga de anónimos está activada.