Erreur CORS Access-Control-Allow-Headers avec l'API après la mise à jour de Discourse

J’ai mis à jour Discourse hier et je reçois toutes les callbacks de l’API avec une erreur. J’ai constaté que le problème venait des en-têtes d’authentification (1), mais en essayant quelques appels, j’obtiens cette erreur :

L'accès à XMLHttpRequest à 'https://mydomain.com/notifications.json?username=admin' depuis l'origine 'https://mydomain.com' a été bloqué par la politique CORS : le champ d'en-tête de requête api-username n'est pas autorisé par Access-Control-Allow-Headers dans la réponse de préflight.

J’utilise Vue et j’ai ajouté api-key et api-username aux en-têtes comme ceci :

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

Vous devrez peut-être configurer CORS dans les paramètres de votre site ?

Oui, j’ai ajouté le domaine où j’appelle l’API dans les paramètres de Discourse, mais cette erreur concernant le champ api-username, je ne sais pas quand je dois la résoudre.

Tu mets ta clé API system dans du code côté client ? :scream:
Cela signifie que n’importe qui peut la récupérer dans ton code JavaScript et l’utiliser pour prendre complètement le contrôle de ton forum.

Toutes les requêtes HTTP Ajax vers Discourse doivent s’appuyer sur une session existante, ou ne pas nécessiter de session du tout.

Ce n’est pas seulement un test, j’utilise le nom d’utilisateur

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

Mais je rencontre toujours la même erreur concernant le CORS et le champ api-username.

Laissez-moi répéter ce que j’ai dit :

Cela signifie : aucun en-tête d’authentification. Pas du tout.

Vous ne devriez vraiment pas utiliser ces identifiants API pour les requêtes CORS, c’est pourquoi ce champ d’en-tête n’est pas autorisé.

Cependant, nous autorisons les en-têtes user-api dans les requêtes CORS :

J’ai lu la spécification des clés API utilisateur

Dans mon cas, j’utilise SSO avec une application frontend en JavaScript. Puis-je consommer l’API sans utiliser l’interface d’autorisation pour chaque utilisateur ? J’aimerais pouvoir utiliser l’attribut api-username… est-ce possible ?

Cordialement

Pourriez-vous résoudre cela ?
Merci !

Au final, je suis revenu à la version précédente de Discourse pour éviter de devoir modifier toute l’intégration de l’API.