Erreur 404 renvoyée lors de l'utilisation de DiscourseAPI Gem pour générer une clé API utilisateur

Bonjour,

Je lutte pour trouver une solution à ce problème et j’espère que quelqu’un ici a des pistes. Récemment, j’ai rejoint un nouveau projet et j’ai repris le relais d’un ancien développeur. J’ai récemment mis à niveau la version de Discourse vers la dernière, alors qu’elle datait de quelques mois, et toutes les autres fonctionnalités et appels API fonctionnent comme prévu.

Ce que j’essaie de faire, c’est utiliser l’API pour créer un sujet dans Discourse depuis notre site web, en dehors de Discourse. Je prends l’ID de l’utilisateur et je le trouve dans Discourse en utilisant la méthode DiscourseAPI by_external_id. Une fois cela fait, j’appelle generate_user_api_key(discourse_user[‘id’]), ce qui transmet l’ID de l’utilisateur sur Discourse.

Cela répond par une erreur DiscourseApi::NotFoundError / 404, qui n’est apparue qu’après la mise à niveau.

Toute aide ou orientation à ce sujet est appréciée !

La route pour générer des clés API a changé, mais la méthode dans le gem Discourse API utilisée pour générer une clé API appelle toujours l’ancienne route. C’est pourquoi vous obtenez l’erreur 404.

Nous allons corriger cela. Pour l’instant, si vous souhaitez générer une clé API pour un utilisateur, vous pouvez le faire en envoyant une requête POST vers http://localhost:3000/admin/api/keys. Voici un exemple de requête CURL. J’ai remplacé ma vraie clé API par $api_key dans l’exemple :

curl -X POST "http://localhost:3000/admin/api/keys" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "key[description]=une clé pour bobby" \
-F "key[username]=bobby"

Vous n’avez pas besoin de générer une clé API utilisateur pour cela. À la place, vous pouvez définir client.api_username sur le nom d’utilisateur que vous souhaitez utiliser pour publier le message :

client.api_username = "susan"
client.create_topic(category: 5, title: "Le super sujet API de Susan", skip_validation: true, raw: "ceci est un test, ceci n'est qu'un test")

client.api_username = "bobby"
client.create_topic(category: 5, title: "Le super sujet API de Bobby", skip_validation: true, raw: "ceci est un test, ceci n'est qu'un test")

Cela fonctionnera correctement tant que vous avez utilisé la clé API Tous les utilisateurs lors de la création du client.

Merci !

J’ai mis à jour mon code pour utiliser la clé « Tous les utilisateurs » au lieu d’en générer une pour chaque utilisateur, et j’ai transmis le nom d’utilisateur de l’utilisateur en tant que api_username, ce qui a résolu le problème.