允许普通用户使用API,不只是管理员

Reverse engineer the Discourse API 说:

网站上能做的任何事情,你都可以通过 JSON API 来完成。

唉,https://docs.discourse.org/

一些端点不需要任何身份验证,几乎所有其他端点都需要你进行身份验证。要进行身份验证,你需要从管理面板创建一个 API 密钥。

这太糟糕了,因为 API 有很多合法的用途
普通用户可以使用,而不仅仅是管理员。

例如,用户可能设置一个每月运行的 cron 任务来下载他们的
preferences.json,而不是在“偏好设置”中点击“下载”
https://meta.discourse.org/t/backup-export-import-preferences/254597)。

我建议需要更改源代码,以便用户很快就能访问他们正在使用的本地 Discourse 的 API,以获取他们的个人数据等。

3 个赞

(允许根据范围进行身份验证的请求)


您可能想看看这些资源,它们可能会非常有帮助 :slight_smile:

6 个赞

Update openapi.yml by jidanni · Pull Request #72 · discourse/discourse_api_docs · GitHub 说:

但是,如果没有管理员的支持和用户 API 密钥站点设置中已批准的端点,“普通用户”仍然无法自行生成 API 密钥。

该响应不正确。如果为用户的信任级别启用了用户 API 密钥生成,任何用户都可以生成用户 API 密钥。如果不在请求负载中设置重定向,它将在浏览器中显示一个包含密钥的 base64 编码响应。

请参阅此主题了解演示如何操作的脚本。

3 个赞

我正在考虑默认情况,即 A 个人安装了 Discourse,而 B 个人只是 A 的 Discourse 上的普通用户,并且 A 没有更改任何管理员设置,B 是否仍然可以通过 API 做很多事情?

用户 API 密钥生成默认对所有用户启用,并且您可以通过 Web 界面执行的任何操作都可以通过 API 执行,因为 Web 界面只是 API 的前端。

我个人在 Chrome 扩展中使用它,该扩展可以汇总我所有拥有帐户的实例中所有未读通知的总数,但有一些例外。

2 个赞

如果用户已经在 Discourse 实例上拥有账户,他们应该能够在其浏览器中的相同 cookie 身份验证用于任何非浏览器 API 请求。

2 个赞