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!
A rota para gerar chaves de API mudou, mas o método no gem da API do Discourse usado para gerar uma chave de API ainda está chamando a rota antiga. É por isso que você está recebendo o erro 404.
Vamos corrigir isso. Por enquanto, se você quiser gerar uma chave de API para um usuário, pode fazê-lo enviando uma solicitação POST para http://localhost:3000/admin/api/keys. Aqui está um exemplo de solicitação CURL. Substituí minha chave de API real por $api_key no exemplo:
Você não precisa gerar uma chave de API de usuário para isso. Em vez disso, você pode definir client.api_username como o nome de usuário que deseja usar para publicar a postagem:
client.api_username = "susan"
client.create_topic(category: 5, title: "Tópico incrível da API da Susan", skip_validation: true, raw: "isso é um teste, isso é apenas um teste")
client.api_username = "bobby"
client.create_topic(category: 5, title: "Tópico incrível da API do Bobby", skip_validation: true, raw: "isso é um teste, isso é apenas um teste")
Isso funcionará corretamente desde que você tenha usado a Chave de API de Todos os Usuários ao criar o client.
Atualizei meu código para usar a chave “Todos os Usuários” em vez de gerar uma para cada usuário e passei o nome de usuário do usuário como api_username, o que resolveu o problema.