Errore CORS Access-Control-Allow-Headers con API dopo l'aggiornamento di Discourse

Ho aggiornato Discourse ieri e ricevo errori in tutti i callback API. Ho scoperto che il problema riguarda le intestazioni di autenticazione (1), ma provando alcune chiamate ricevo questo errore:

Access to XMLHttpRequest at 'https://mydomain.com/notifications.json?username=admin' from origin 'https://mydomain.com' has been blocked by CORS policy: Request header field api-username is not allowed by Access-Control-Allow-Headers in preflight response.

Sto usando Vue e ho aggiunto api-key e api-username alle intestazioni in questo modo:

Vue.http
        .get(
             "https://discourse.mydomain.com/notifications.json?username="+input.username,
          {
            headers: {
             "Api-Key":"xxxxxxxxxxxxxxxxx",
             "Api-Username": "system",
              "content-type": "application/json",
              accept: "application/json"
            }
          }
        )

(1) Discourse REST API Documentation

Potrebbe essere necessario configurare CORS nelle impostazioni del tuo sito?

Sì, ho aggiunto il dominio da cui chiamo l’API nelle impostazioni di Discourse, ma quell’errore relativo al campo api-username: non so quando debba risolverlo.

Stai inserendo la tua chiave API system nel codice lato client? :scream:
Questo significa che chiunque può prenderla dal tuo codice JavaScript e usarla per possedere completamente il tuo forum.

Qualsiasi richiesta HTTP Ajax a Discourse dovrebbe sfruttare una sessione esistente o non averne affatto bisogno.

Non è solo un test, sto usando il nome utente

      Vue.http
    .get(
      "https://discourse.mydomain.com/notifications.json?username="+input.username,
      {
        headers: {
       "Api-Key":"xxxxxxxxxxxxxxxxxxxxxx",
        "Api-Username": input.username    
        }
      }
    )

Ma ricevo lo stesso errore relativo a CORS e al campo api-username.

Lascia che ripeta quanto ho detto:

Questo significa: nessun header di autenticazione. Per nessun motivo.

Non dovresti davvero utilizzare queste credenziali API per le richieste CORS, ed è per questo che quel campo di intestazione non è consentito.

Tuttavia, permettiamo le intestazioni user-api nelle richieste CORS:

Ho letto la specificazione delle chiavi API utente

Nel mio caso, ho un SSO con un’app frontend in JavaScript. È possibile utilizzare l’API senza dover mostrare l’interfaccia di autorizzazione per ogni utente? Vorrei un modo per utilizzare l’api-username… è possibile?

Saluti

Potresti risolvere questo?
Grazie!

Alla fine, sono tornato alla versione precedente di Discourse così non ho dovuto modificare tutte le integrazioni API