Wenn eine Theme-Komponente Assets in ihrer about.json deklariert, speichert und liefert Discourse sie unter /uploads/.
Wenn die Website-Einstellung „Verhindern, dass Anonyme Dateien herunterladen“ aktiviert ist, geben diese Theme-Assets für anonyme Benutzer 404 zurück, da sie als geschützte Uploads behandelt werden.
Dies kann jedes Theme oder jede Komponente beeinträchtigen, die ihre eigene JavaScript-Datei dynamisch lädt – zum Beispiel die Komponente Topic List Previews.
Schritte zur Reproduktion
- Installieren Sie die Komponente Topic List Previews (
https://github.com/merefield/discourse-tc-topic-list-previews). - Überprüfen Sie, ob sie sowohl für angemeldete als auch für anonyme Benutzer korrekt geladen wird.
- Aktivieren Sie die Website-Einstellung Verhindern, dass Anonyme Dateien herunterladen.
- Besuchen Sie die Homepage des Forums als abgemeldeter Benutzer und überprüfen Sie die Browserkonsole.
Beobachtetes Verhalten
-
Anfragen für Dateien wie
/uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.jsgeben 404 Not Found zurück (tatsächlich eine HTML-Fehlerseite).
-
Die Browserkonsole zeigt:
Refused to execute script ... because its MIME type ('text/html') is not executable -
Komponenten, die von dieser Datei abhängen (z. B.
preview-edits.gjsin Topic List Previews), können nicht ausgeführt werden, was zu Layout-Problemen führt.
Erwartetes Verhalten
Theme-Assets, die in about.json definiert sind, sollten immer öffentlich zugänglich sein, unabhängig von der Einstellung „Verhindern, dass Anonyme Dateien herunterladen“.
Es handelt sich um statische Assets, nicht um Benutzer-Uploads, und sie sollten keine zugriffsbeschränkungen auf Upload-Ebene erben.
Technische Details
-
Discourse-Version: 3.6.0.beta2 (aktuellste)
-
Komponente: Topic List Previews
-
Relevanter
about.json-Ausschnitt:"assets": { "imagesloaded": "assets/imagesloaded.js" } -
Während der Theme-Installation speichert Discourse diese Datei als
Uploadunter/uploads/default/original/.... -
Die Aktivierung der Anonymen-Beschränkung führt dazu, dass Discourse Anfragen für diesen Pfad blockiert, obwohl es sich um ein Theme-Asset handelt.
Vorgeschlagene Lösung
Theme-Assets, die über about.json hochgeladen werden, sollten:
- Von einem dedizierten Pfad (z. B.
/theme-assets/oder/assets/) bereitgestellt werden
oder - Von der Einschränkung „Verhindern, dass Anonyme Dateien herunterladen“ ausgenommen werden.
Auswirkungen
Dies betrifft jedes Theme oder jede Komponente, die auf dynamisch im Client geladene Theme-Assets (JS/CSS/Bilder) angewiesen ist.
Unterbricht wichtige UI-Komponenten für anonyme Besucher, wenn die Anonymen-Download-Beschränkung aktiviert ist.