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 !

2 « J'aime »

The route for generating API keys has changed, but the method in the Discourse API gem that’s used for generating an API key is still calling the old route. That’s why you are getting the 404 error.

We will get this fixed. For now, if you would like to generate an API key for a user, you can do it by making a POST request to http://localhost:3000/admin/api/keys". Here’s an example CURL request. I’ve substituted my actual API key with $api_key in the example:

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]=a key for bobby" \
-F "key[username]=bobby"

You do not need to generate a user API key for this. Instead, you can set client.api_username to the username you want to use to publish the post:

client.api_username = "susan"
client.create_topic(category: 5, title: "Susan's really awesome API topic", skip_validation: true, raw: "this is a test, this is only a test")

client.api_username = "bobby"
client.create_topic(category: 5, title: "Bobby's really awesome API topic", skip_validation: true, raw: "this is a test, this is only a test")

This will work correctly as long as you used the All Users API key when you created the client.

3 « J'aime »

Thank you!

I updated my code to use the “All Users” key instead of generating one for each user and pass the user’s username as the api_username and that fixed it.

2 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.