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!

La ruta para generar claves de API ha cambiado, pero el método en el gem de la API de Discourse que se utiliza para generar una clave de API sigue llamando a la ruta antigua. Por eso estás obteniendo el error 404.

Vamos a solucionar esto. Por ahora, si deseas generar una clave de API para un usuario, puedes hacerlo realizando una solicitud POST a http://localhost:3000/admin/api/keys. Aquí tienes un ejemplo de solicitud CURL. He sustituido mi clave de API real por $api_key en el ejemplo:

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]=una clave para bobby" \
-F "key[username]=bobby"

No necesitas generar una clave de API de usuario para esto. En su lugar, puedes establecer client.api_username en el nombre de usuario que deseas usar para publicar el mensaje:

client.api_username = "susan"
client.create_topic(category: 5, title: "El tema de API realmente increíble de Susan", skip_validation: true, raw: "esta es una prueba, esto es solo una prueba")

client.api_username = "bobby"
client.create_topic(category: 5, title: "El tema de API realmente increíble de Bobby", skip_validation: true, raw: "esta es una prueba, esto es solo una prueba")

Esto funcionará correctamente siempre que hayas utilizado la clave de API de Todos los usuarios al crear el client.

¡Gracias!

Actualicé mi código para usar la clave “Todos los usuarios” en lugar de generar una para cada usuario, y pasé el nombre de usuario del usuario como api_username. Eso solucionó el problema.