Pour notre application, nous utilisons une clé API globale destinée à tous les utilisateurs. Nous utilisions un nom d’utilisateur virtuel (utilisateur inexistant) anonymous pour représenter le contexte lorsqu’un utilisateur n’était pas connecté. Cela a fonctionné pendant plus de 3 ans jusqu’au 25/10/2020 à 00h39 CT.
J’ai pallié ce problème aujourd’hui en créant un utilisateur avec ce nom d’utilisateur. Une restriction a-t-elle été déployée ce week-end ? Mise à jour de l’API ?
Cela a empêché tous les utilisateurs publics de consulter les commentaires, donc une réponse serait grandement appréciée.
Je ne suis pas au courant d’un changement récent qui aurait modifié ce comportement. J’avais l’impression que cela fonctionnait toujours ainsi (afficher une erreur si l’utilisateur n’est pas trouvé). Voici le code qui vérifie s’il peut lire le nom d’utilisateur à partir des identifiants API.
Un changement récent a été apporté il y a 23 jours, mais il ne s’applique pas à votre situation et renvoie de toute façon un message d’erreur différent.
Pour double vérifier, j’ai configuré mon Discourse local pour utiliser ce commit datant d’il y a plus d’un an, et j’obtiens la même erreur en utilisant un utilisateur inexistant.
Une bonne chose qui en découle est que nous disposons maintenant de scopes API, donc si les utilisateurs ont seulement besoin d’un accès read, vous pouvez mettre à jour cette clé API afin qu’elle ne soit plus une clé d’accès total.
S’il s’agit d’un site public, vous devriez pouvoir effectuer ces requêtes depuis votre backend sans aucune authentification afin d’obtenir la vue anonyme. Si les limites de taux deviennent problématiques, alors oui, vous devrez utiliser un véritable utilisateur fictif.
Une autre chose qui me vient à l’esprit, c’est le paramètre du site revoke api keys days. Comme cet utilisateur n’existe pas, nous ne mettons jamais à jour la date de dernière utilisation de cette clé, et je parie que la clé a été révoquée automatiquement ? Je ne suis toujours pas sûr de savoir comment vous auriez pu effectuer une requête valide dans un premier temps, cependant.