Error 404 al usar DiscourseAPI Gem para generar una clave de API de usuario

Hola,

He estado luchando por encontrar una solución a esto y espero que alguien aquí tenga alguna idea. Recientemente me uní a un nuevo proyecto y asumí el relevo de un desarrollador anterior. Hace poco actualicé la versión de Discourse a la más reciente; estaba varios meses desactualizada, y todas las demás funciones y llamadas a la API funcionan como se espera.

Lo que estoy intentando hacer es utilizar la API para crear un tema en Discourse desde nuestro sitio web, fuera de Discourse. Tomo el ID del usuario y lo busco en Discourse utilizando el método DiscourseAPI by_external_id. Una vez que lo tengo, llamo a generate_user_api_key(discourse_user[‘id’]), lo que pasa el ID del usuario en Discourse.

Esto responde con un error DiscourseApi::NotFoundError / 404, el cual solo comenzó a aparecer después de la actualización.

¡Agradezco cualquier ayuda o orientación al respecto!

2 Me gusta

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 Me gusta

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 Me gusta

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