大家好。我是 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 个赞
Jagster
(Jakke Lehtonen)
3
我不知道,但你可以只使用 everyone 来简化你的类别设置。
2 个赞
您好 @Bas,感谢您的评论,
但为什么只针对 like?我已经使用 Discourse API 和全局密钥(用户级别:所有用户,范围:全局)实现了帖子创建、回复创建、书签添加和移除。
我也尝试创建一个新的全局 API 密钥,但仍然收到相同的错误 
如果 API 密钥具有全局范围并且对所有用户都有效,那么以下 API 应该可以工作,不是吗?
RGJ
(Richard - Communiteq)
5
是的,这段代码在我看来也不错。
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
}
哎呀,我好像发现问题了。
我在使用 Web 面板进行测试时,错误地选择了一个其他用户的帖子(标题与我正在测试的帖子相同),然后测试成功了。
但当我使用我的系统进行测试时,我试图为自己的帖子点赞。
对于由此带来的任何不便,我深表歉意。我之前不知道不能为自己的帖子点赞。
谢谢,祝您有愉快的一天。
3 个赞
system
(system)
关闭
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.