Я уже долгое время пытаюсь найти решение этой проблемы и надеюсь, что кто-то здесь сможет помочь. Недавно я присоединился к новому проекту и взял на себя обязанности предыдущего разработчика. Недавно я обновил сборку Discourse до последней версии — она отставала на несколько месяцев — и все остальные функции и вызовы API работают как ожидалось.
Моя задача — использовать API для создания темы в Discourse с нашего внешнего сайта. Я беру ID пользователя, нахожу его в Discourse с помощью метода DiscourseAPI by_external_id. После этого вызываю generate_user_api_key(discourse_user[‘id’]), передавая ID пользователя из Discourse.
В ответ я получаю ошибку DiscourseApi::NotFoundError / 404, которая появилась только после обновления.
Маршрут для генерации API-ключей изменился, но метод в gem Discourse API, используемый для генерации API-ключа, всё ещё обращается к старому маршруту. Вот почему вы получаете ошибку 404.
Мы исправим это. На данный момент, если вам нужно сгенерировать API-ключ для пользователя, вы можете сделать это, отправив POST-запрос на http://localhost:3000/admin/api/keys. Вот пример запроса CURL. В примере я заменил свой реальный API-ключ на $api_key:
Для этого не нужно генерировать пользовательский API-ключ. Вместо этого вы можете установить client.api_username в имя пользователя, от имени которого нужно опубликовать пост:
client.api_username = "susan"
client.create_topic(category: 5, title: "Супер крутая API-тема от Susan", skip_validation: true, raw: "это тест, это только тест")
client.api_username = "bobby"
client.create_topic(category: 5, title: "Супер крутая API-тема от Bobby", skip_validation: true, raw: "это тест, это только тест")
Это будет работать корректно, если при создании client вы использовали API-ключ «Все пользователи».
Я обновил свой код, чтобы использовать ключ «Все пользователи» вместо генерации отдельного ключа для каждого пользователя, и передал имя пользователя как api_username. Это помогло решить проблему.