Salut tout le monde. J’utilise le SSO sur mon forum et les avatars sont contrôlés par mon site web.
Jusqu’à il y a quelques jours, le téléchargement/la mise à jour d’avatars du site web vers Discourse, via l’API, fonctionnait. J’obtiens maintenant une erreur 422 - Unprocessable Entity.
J’ai essayé de déboguer le problème, j’ai fait quelques tests avec Postman et j’ai les mêmes problèmes. La requête que j’effectue est ci-dessous (sans l’URL, le nom d’utilisateur et la clé API, bien sûr).
Quelqu’un sait s’il y a un problème avec cette partie de Discourse ?
Je pense que cela interférerait avec le téléchargement réel, et non avec l’attribution de l’avatar à l’utilisateur.
Je peux télécharger le fichier sans aucun problème. C’est lorsque j’appelle l’API pour indiquer quel fichier utiliser comme avatar que j’obtiens l’erreur, et cela a commencé à l’improviste.
Je tente ma chance et je relance une dernière fois. Il est étrange que personne n’ait trouvé cela. Je suis sûr que ce n’est pas un problème de codage car cela fonctionne depuis plus de deux ans maintenant.
Remplace l’avatar de l’utilisateur par la valeur du payload DiscourseConnect. Si activé, les utilisateurs ne seront pas autorisés à télécharger des avatars sur Discourse.
Sur ma machine locale, avec ce paramètre désactivé, j’obtiens une réponse HTTP 200 lors de la mise à jour de l’avatar via l’API :
Je n’ai pas encore de réponse, mais je voulais juste vous faire savoir que c’est sur ma liste à examiner. J’ai une configuration SSO que je peux tester localement, afin que nos paramètres correspondent. Il semble que nous devrions respecter ce paramètre de site, ce qui pourrait être un changement récent apporté par quelqu’un, mais peut-être pourrions-nous ajouter un remplacement d’API.
J’y ai pensé aussi, mais ça n’a pas fonctionné. De plus, ce problème est apparu soudainement. Personne n’a rien changé (je suis le seul administrateur, donc aucune chance que quelqu’un ait pu modifier des paramètres), aucun changement de code sur le site principal, rien.
Pouvez-vous me dire quel est le réglage de allow_uploaded_avatars ? Ce n’est plus un simple réglage vrai/faux, mais il est défini sur un certain niveau de confiance. Pouvez-vous également me dire quel est le niveau de confiance de l’utilisateur qui essaie de changer son avatar ? Et êtes-vous sur la dernière version de Discourse ?
Voici le code pour choisir un avatar et les lignes qui renvoient des réponses 422.
Non pas que cela ne puisse pas être autre chose au plus profond de la base de code, mais c’est probablement l’un de ces 3. Le premier a à voir avec discourse_connect_overrides_avatar et apparemment nous avons écarté celui-là. Je ne pense pas que ce soit le deuxième car votre commande curl semble correcte et inclut le type “uploaded”. Il pourrait encore s’agir du troisième avec le réglage allow_uploaded_avatars, c’est pourquoi j’aimerais savoir quel est le réglage que vous avez pour celui-ci.
Je l’avais désactivé jusqu’à ce que ce problème commence. Ensuite, je l’ai changé en 0: nouveau membre.
Mais le désactiver a toujours fonctionné pour moi. Je ne veux pas que les utilisateurs téléchargent depuis le forum, mais plutôt depuis le site Web qui utilise l’authentification unique (SSO). Cependant, le changer en 0: nouveau membre ne change rien. J’obtiens toujours la même erreur
Je ne trouve aucune mise à jour récente qui aurait empêché les avatars de fonctionner via l’API alors que tous les paramètres du site les bloquent. Quoi qu’il en soit, si vous utilisez SSO (ou DiscourseConnect), vous devriez utiliser la route API /admin/users/sync_sso pour mettre à jour l’avatar des utilisateurs et non la route UI (/u/username/preferences/avatar/pick).
Et passez ces paramètres dans le corps de la requête :
Salut Blake. Merci beaucoup pour ton aide continue sur ce sujet.
Je ne trouve aucune information sur ce point de terminaison dans la documentation de l’API. Est-ce quelque chose de nouveau ?
De plus, comme je l’ai indiqué précédemment, la mise à jour de l’avatar fonctionnait bien depuis plusieurs mois en utilisant le point de terminaison /u/username/preferences/avatar/pick, ce qui est vraiment étrange. Cela vient tout simplement de cesser de fonctionner. Cela me laisse vraiment perplexe.
Cela n’a toujours aucun sens pour moi que les choses aient cessé de fonctionner d’elles-mêmes et que je reçoive des erreurs 422 à tout bout de champ, même avec ce point de terminaison.
Je vais essayer de trouver une solution différente.