Theme-Assets, die von `/uploads/` geladen werden, funktionieren nicht, wenn „Verhindere, dass Anons Dateien herunterladen“ aktiviert ist

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

  1. Installieren Sie die Komponente Topic List Previews (https://github.com/merefield/discourse-tc-topic-list-previews).
  2. Überprüfen Sie, ob sie sowohl für angemeldete als auch für anonyme Benutzer korrekt geladen wird.
  3. Aktivieren Sie die Website-Einstellung Verhindern, dass Anonyme Dateien herunterladen.
  4. 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.js
    

    geben 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.gjs in 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 Upload unter /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.

3 „Gefällt mir“

Vielen Dank für die sehr detaillierte Beschreibung, ich stimme zu, dass es sinnvoll ist, hier etwas zu unternehmen.

1 „Gefällt mir“

Ich glaube nicht, dass dies auf Theme-Assets beschränkt ist. Es scheint, dass das Aktivieren dieser Einstellung auch Dinge wie das Website-Logo, das Favicon usw. für anonyme Benutzer beeinträchtigt. Die Implementierung ist ein vollständiger Block für /uploads/* für Anonyme.

Sehen Sie auch ein defektes Logo auf Ihrer Website für Anonyme @lhkjacky?

1 „Gefällt mir“