也许我们正在构建相同的东西
尽管我的只是部分无头。
我怀疑没有,而且这是故意的。
我一直在想同样的事情,但我想在我的情况下这没关系——我并没有试图隐藏 Discourse。
需要注意的一点是,用户 API 密钥与管理员所有用户 API 密钥默认应用不同的速率限制:https://meta.discourse.org/t/available-settings-for-global-rate-limits-and-throttling/78612。
用户 API 速率限制:
DISCOURSE_MAX_USER_API_REQS_PER_MINUTE:默认 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY:默认 2880
管理员 API 速率限制:
DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE:60
如果您的应用程序连接到自托管的 Discourse 站点,您很可能可以覆盖管理员 API 速率限制。如果您的应用程序连接到托管的 Discourse 实例,用户 API 速率限制提供了更大的灵活性。使用管理员 API 速率限制,您最终不得不将所有请求放入一个速率受限的队列中。
编辑:与其使用 用户 API 密钥规范 来生成密钥,不如使用管理员 API 密钥来生成用户 API 密钥。这样可以避免用户必须批准应用程序的问题。
请注意,下面发布的密钥是针对我的本地主机域的,因此发布它没有风险。
unescaped key params: {key:description:sally} {key:username:sally} {key:scopes:[scope_id:topics:write]} {key:scopes:[key:write]} {key:scopes:[name:write]} {key:scopes:[params:[topic_id]]} {key:scopes:[urls:[/posts (POST)]]} {key:scopes:[selected:true]}
❯ curl -X POST \"http://localhost:4200/admin/api/keys\" \
-H \"Api-Key: $api_key\" \
-H \"Api-Username: system\" \
-H \"Content-Type: application/json\" \
-d $json
{\"key\":{\"id\":29,\"key\":\"f5c6307b51dd2882bde525dc9775fe7504b55c93fa40177b650f9e6b77a9d25b\",\"truncated_key\":\"f5c6\",\"description\":\"sally\",\"last_used_at\":null,\"created_at\":\"2024-06-02T00:44:19.944Z\",\"updated_at\":\"2024-06-02T00:44:19.944Z\",\"revoked_at\":null,\"user\":{\"id\":3,\"username\":\"sally\",\"avatar_template\":\"/user_avatar/127.0.0.1/sally/{size}/58_2.png\"},\"api_key_scopes\":[{\"resource\":\"topics\",\"action\":\"write\",\"parameters\":[\"topic_id\"],\"urls\":[\"/posts (POST)\"],\"allowed_parameters\":{},\"key\":\"write\"}]}}
无论哪种情况,您最终都会得到一个需要以某种方式管理的 API 密钥。我假设是加密并保存到数据库中。