我如何允许用户通过REST API点赞帖子

大家好。我是 Discourse 的新手,查看了所有站点设置/admin/site_settings)部分,希望能找到一个选项,允许任何级别的用户使用 RESTapi 点赞帖子。

目前,所有用户都可以(无需公开)创建主题、添加回复等。但是,普通用户(tl0、tl1 等)无法通过 API 点赞任何帖子(但可以在 Web 面板上点赞)。

这是我的分类设置:

我正在使用以下代码通过 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();
    }
  }

它抛出了:

您无权查看所请求的资源。

但是,如果我以该用户身份登录 Discourse,那么该用户就可以点赞。

到目前为止,我使用相同的 API 密钥和相同的分类和用户名集成了主题创建、帖子创建和书签 API,它们都可以正常工作,没有权限问题。

您能帮我弄清楚我在这里做错了什么吗?如果需要更多信息,请告诉我。

谢谢。

1 个赞

我认为您需要

我不知道,但你可以只使用 everyone 来简化你的类别设置。

2 个赞

您好 @Bas,感谢您的评论,

但为什么只针对 like?我已经使用 Discourse API 和全局密钥(用户级别:所有用户,范围:全局)实现了帖子创建、回复创建、书签添加和移除。

我也尝试创建一个新的全局 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:

我在使用 Web 面板进行测试时,错误地选择了一个其他用户的帖子(标题与我正在测试的帖子相同),然后测试成功了。

但当我使用我的系统进行测试时,我试图为自己的帖子点赞。

对于由此带来的任何不便,我深表歉意。我之前不知道不能为自己的帖子点赞。

谢谢,祝您有愉快的一天。

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.