API로 게시물을 잠금할 수 없음

애플리케이션에서 Discourse로 몇 가지 API 호출을 보내 게시물을 수정하고 있습니다.

첫 번째 호출에서는 게시물을 수정하는데, 이 부분은 잘 작동합니다. 다음 호출에서는 게시물을 잠금 처리하려고 합니다.

JavaScript에서 게시물을 잠그기 위한 호출은 다음과 같습니다.

fetch(`https://forum.hollowverse.com/posts/1817/locked.json`, {
  method: 'PUT',
  headers: {
    'Api-Key': process.env.DISCOURSE_SYSTEM_PRIVILEGE_SECRET,
    'content-type': 'application/json',n    'Api-Username': 'hollowbot',
  },
  body: JSON.stringify({locked: true}),
});

이 호출을 실행하면 Discourse가 {locked: false}로 응답합니다.

게시물을 수동으로 잠금 처리한 후 Discourse 클라이언트가 보내는 API 호출을 검사해 보았는데, 인증 방식을 제외하면 제 애플리케이션에서 보내는 호출과 매우 유사해 보입니다.

무슨 일이 일어나고 있는지 모르겠는데, 혹시 아이디어가 있으신가요?

명확한 문제는 보이지 않습니다. Discourse API 역공학 방법을 따라 하신 건가요? 만약 제가 컴퓨터 앞에 있다면 그 방법으로 도움을 드렸을 겁니다.

게시글을 잠그는 API는 여기 Discourse API Docs 에 문서화되어 있습니다. 네, 저도 Discourse 클라이언트가 어떻게 작동하는지 역설계해 봤는데, 제 애플리케이션에서 사용하는 방식과 매우 비슷해 보입니다.

code는 다음과 같습니다.

params[:locked] === "true" ? locker.lock : locker.unlock

이는 문자열 비교를 수행하는 것으로 보입니다.

즉, "locked": true가 아니라 "locked": "true"를 보내야 하며, 이 동작을 반영하거나 변경하려면 문서 또는 코드가 업데이트되어야 합니다.

브라우저는 JSON 요청을 보내지 않고 Content-Type: application/x-www-form-urlencoded를 보내며, 이는 매개변수를 문자열로 해석합니다. 따라서 브라우저에서는 작동하는 것입니다.

도움 주셔서 감사합니다, Richard!

오늘 처음 알았네요!

문서 업데이트를 위한 PR도 검토해 보겠습니다.