Asset del tema serviti da `/uploads/` non funzionano quando è abilitato "Impedisci agli anonimi di scaricare file"

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

  1. Installa il componente Anteprime Elenco Argomenti (https://github.com/merefield/discourse-tc-topic-list-previews).
  2. Verifica che venga caricato correttamente sia per gli utenti autenticati che per quelli anonimi.
  3. Abilita l’impostazione del sito Impedisci agli anonimi di scaricare file.
  4. 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.js
    

    restituiscono 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.gjs in 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.json pertinente:

    "assets": {
      "imagesloaded": "assets/imagesloaded.js"
    }
    
  • Durante l’installazione del tema, Discourse memorizza questo file come Upload sotto /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.

3 Mi Piace

Grazie per la descrizione super dettagliata, concordo sul fatto che abbia senso fare qualcosa qui.

1 Mi Piace

Non credo che questo sia limitato alle risorse del tema. Sembra che l’abilitazione di tale impostazione interrompa anche cose come il logo del sito, la favicon, ecc. per gli utenti anonimi. L’implementazione è un blocco completo su /uploads/* per gli anonimi.

Stai anche vedendo un logo rotto sul tuo sito per gli anonimi @lhkjacky?

1 Mi Piace