REST API를 이용해 사용자가 게시글에 '좋아요'를 누를 수 있도록 하는 방법

안녕하세요. 저는 Discourse를 처음 사용하는 초보자인데, RESTapi를 통해 모든 레벨의 사용자가 게시물을 '좋아요’할 수 있도록 허용하는 옵션을 찾기 위해 All Site Settings(/admin/site_settings) 섹션을 확인해 보았습니다.

현재 모든 사용자(공개 설정과 무관하게)가 주제 생성, 답변 추가 등을 수행할 수 있습니다. 그러나 일반 사용자(tl0, tl1 등)는 웹 패널을 통해 '좋아요’를 누를 수는 있지만, API를 통해 '좋아요’를 누를 수 없습니다.

제 카테고리 설정은 다음과 같습니다.

다음과 같은 코드를 사용하여 API를 통해 '좋아요’를 추가하고 있습니다.

  public async likeOrThrow(contentId: number, username: string) {
    try {
      this.overrideUsername(username);
      const res = await this.client.post(`post_actions.json`, {
        id: contentId,
        post_action_type_id: 2,
        flag_topic: false,
      });
      return res.data;
    } catch (error) {
      throw this.getException(error);
    } finally {
      this.resetUsername();
    }
  }

다음과 같은 오류가 발생합니다.

You are not permitted to view the requested resource.

하지만 해당 사용자로 Discourse에 로그인하면 그 사용자는 '좋아요’를 누를 수 있습니다.

지금까지 동일한 API 키, 동일한 카테고리 및 사용자 이름으로 주제 생성, 게시물 생성 및 북마크 API를 통합했으며, 권한 문제 없이 모두 정상적으로 작동합니다.

제가 어디를 잘못하고 있는지 파악하는 데 도움을 주실 수 있을까요? 추가 정보가 필요하시다면 알려주세요.

감사합니다.

다음 링크가 필요할 것 같습니다.

모르겠지만, everyone만 사용하면 카테고리 설정을 더 쉽게 할 수 있습니다.

안녕하세요 @Bas, 댓글 감사합니다.

하지만 왜 like만 그런가요? 저는 이미 Discourse API를 사용하여 글로벌 키(사용자 수준: all-users, 범위: global)로 게시물 생성, 답글 생성, 북마크 추가 및 삭제를 구현했습니다.

새로운 글로벌 API 키도 만들어서 시도해 봤는데, 여전히 같은 오류가 발생합니다. :frowning:

API 키가 글로벌 범위를 가지고 모든 사용자에게 유효하다면, 다음 API가 작동해야 하지 않나요?

네, 이 코드는 저도 괜찮은 것 같습니다.

contentId는 어떻게, 또는 무엇으로 설정되고 있나요? 올바른 Post.id인가요?

안녕하세요 @RGJ

contentId는 게시물 ID이고, 네, 올바른 게시물 ID입니다.

다음 코드를 사용하면 로깅됩니다.

      this.client.interceptors.request.use((config) => {
        Logger.log(`Request to ${config.url}`);
        Logger.log(`Headers: ${JSON.stringify(config.headers, null, 2)}`);
        Logger.log(`Body: ${JSON.stringify(config.data, null, 2)}`);
        return config;
      })

로그,

[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Request to post_actions.json
[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Headers: {
  "Accept": "application/json, text/plain, */*",
  "Api-Username": "m...91",
  "Api-Key": "66dc....18b56fbc17bcf"
}
[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Body: {
  "id": 84,
  "post_action_type_id": 2,
  "flag_topic": false
}

아, 문제를 찾은 것 같습니다. :grimacing:

웹 패널로 테스트할 때 실수로 다른 사용자의 게시글(테스트하던 글과 제목이 같은 글)을 선택했는데, 그건 성공했습니다.

하지만 제 시스템으로 테스트할 때는 제 자신의 게시글에 좋아요를 누르려고 했었네요.

불편을 드려 죄송합니다. 자신의 게시글에는 좋아요를 누를 수 없다는 점을 몰랐습니다.

감사드리고, 좋은 하루 보내세요.