Quando un componente del tema dichiara asset nel suo about.json, Discourse li memorizza e li serve sotto /uploads/.
Se l’impostazione del sito “Impedisci agli anonimi di scaricare file” è abilitata, questi asset del tema restituiscono 404 per gli utenti anonimi perché vengono trattati come upload protetti.
Ciò può causare problemi a qualsiasi tema o componente che carica dinamicamente il proprio JavaScript, ad esempio il componente Anteprime Elenco Argomenti.
Passaggi per riprodurre
- Installa il componente Anteprime Elenco Argomenti (
https://github.com/merefield/discourse-tc-topic-list-previews). - Verifica che venga caricato correttamente sia per gli utenti autenticati che per quelli anonimi.
- Abilita l’impostazione del sito Impedisci agli anonimi di scaricare file.
- Visita la homepage del forum come utente disconnesso e controlla la console del browser.
Comportamento osservato
-
Le richieste per file come
/uploads/default/original/1X/d8ce366bd7aad8f9fc7b26b08aecc855dd6d425c.jsrestituiscono 404 Not Found (in realtà una pagina di errore HTML).
-
La console del browser mostra:
Refused to execute script ... because its MIME type ('text/html') is not executable -
I componenti che dipendono da quel file (ad esempio,
preview-edits.gjsin Anteprime Elenco Argomenti) non vengono eseguiti, causando problemi di layout.
Comportamento previsto
Gli asset del tema definiti in about.json dovrebbero essere sempre accessibili pubblicamente, indipendentemente dall’impostazione “Impedisci agli anonimi di scaricare file”.
Si tratta di asset statici, non di upload utente, e non dovrebbero ereditare restrizioni di accesso a livello di upload.
Dettagli tecnici
-
Versione di Discourse: 3.6.0.beta2 (più recente)
-
Componente: Anteprime Elenco Argomenti
-
Frammento
about.jsonpertinente:"assets": { "imagesloaded": "assets/imagesloaded.js" } -
Durante l’installazione del tema, Discourse memorizza questo file come
Uploadsotto/uploads/default/original/.... -
L’abilitazione della restrizione per gli anonimi fa sì che Discourse blocchi le richieste per quel percorso, anche se si tratta di un asset del tema.
Risoluzione proposta
Gli asset del tema caricati tramite about.json dovrebbero essere:
- Serviti da un percorso dedicato (ad esempio,
/theme-assets/o/assets/)
oppure - Esentati dalla restrizione “Impedisci agli anonimi di scaricare file”.
Impatto
Ciò influisce su qualsiasi tema o componente che si basa su asset del tema (JS/CSS/immagini) caricati dinamicamente nel client.
Interrompe componenti UI importanti per i visitatori anonimi quando la restrizione di download per gli anonimi è attiva.