Когда компонент темы объявляет ресурсы в файле about.json, Discourse сохраняет и предоставляет их по пути /uploads/.
Если включена настройка сайта «Запретить анонимным пользователям скачивать файлы», эти ресурсы темы возвращают ошибку 404 для анонимных пользователей, так как они рассматриваются как защищённые загрузки.
Это может нарушить работу любой темы или компонента, который динамически загружает собственный JavaScript — например, компонента Предварительный просмотр тем.
Шаги для воспроизведения
- Установите компонент Предварительный просмотр тем (
https://github.com/merefield/discourse-tc-topic-list-previews). - Убедитесь, что он корректно загружается как для авторизованных, так и для анонимных пользователей.
- Включите настройку сайта Запретить анонимным пользователям скачивать файлы.
- Откройте главную страницу форума как неавторизованный пользователь и проверьте консоль браузера.
Наблюдаемое поведение
-
Запросы к файлам, таким как
/uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.jsвозвращают ошибку 404 Not Found (на самом деле — HTML-страницу с ошибкой).
-
В консоли браузера отображается сообщение:
Refused to execute script ... because its MIME type ('text/html') is not executable -
Компоненты, зависящие от этого файла (например,
preview-edits.gjsв компоненте «Предварительный просмотр тем»), не выполняются, что приводит к проблемам с отображением макета.
Ожидаемое поведение
Ресурсы темы, объявленные в about.json, должны всегда быть доступны публично, независимо от настройки «Запретить анонимным пользователям скачивать файлы».
Это статические ресурсы, а не загрузки пользователей, и они не должны наследовать ограничения доступа к загрузкам.
Технические детали
-
Версия Discourse: 3.6.0.beta2 (последняя)
-
Компонент: Предварительный просмотр тем
-
Соответствующий фрагмент
about.json:"assets": { "imagesloaded": "assets/imagesloaded.js" } -
При установке темы Discourse сохраняет этот файл как
Uploadпо пути/uploads/default/original/.... -
Включение ограничения для анонимов приводит к тому, что Discourse блокирует запросы к этому пути, даже если это ресурс темы.
Предлагаемое решение
Ресурсы темы, загружаемые через about.json, должны:
- Предоставляться из выделенного пути (например,
/theme-assets/или/assets/)
либо - Быть исключены из действия ограничения «Запретить анонимным пользователям скачивать файлы».
Влияние
Это затрагивает любые темы или компоненты, которые используют ресурсы темы (JS/CSS/изображения), динамически загружаемые на стороне клиента.
При включении ограничения на скачивание для анонимов нарушается работа основных компонентов интерфейса для неавторизованных посетителей.