Tenho tido dificuldade em encontrar uma solução para isso e espero que alguém aqui tenha alguma orientação. Recentemente, entrei em um novo projeto e assumi o lugar de um desenvolvedor anterior. Fiz a atualização da build do Discourse para a versão mais recente — ela estava com alguns meses de atraso — e todas as outras funcionalidades e chamadas de API estão funcionando conforme o esperado.
O que estou tentando fazer é usar a API para criar um tópico no Discourse a partir do nosso site, fora do próprio Discourse. Pego o ID do usuário e o localizo no Discourse usando o método DiscourseAPI by_external_id. Assim que o encontro, chamo generate_user_api_key(discourse_user[‘id’]), passando o ID do usuário no Discourse.
Isso retorna um erro DiscourseApi::NotFoundError / 404, que começou a ocorrer apenas após a atualização.
Qualquer ajuda ou orientação será muito apreciada!
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:
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.
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.