# 如何在非私密类别中获取所有最新/热门消息？

**URL:** <https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457>\
**Category:** Development\
**Created:** [2020年四月27日 13:39 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457 "2020-04-27T13:39:32Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![pnoeric](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pnoeric/32/177144_2.png) [@pnoeric](https://meta.discourse.org/u/pnoeric)\
**Post date:** [2020年四月27日 13:39 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457/1 "2020-04-27T13:39:32Z")

</div>

我的情况是这样的：我通过 SSO 使用 Discourse。我的主站成员可能从未访问过论坛（至少目前如此），但我希望向他们展示最新或热门的话题，以吸引他们点击，看看自己错过了什么。

然而，在他们首次进入论坛之前，他们还没有 Discourse 个人资料。（根据 SSO 的设计，个人资料会在首次登录时创建。）

这就带来了一个问题：如果我向 Discourse 请求最新活动，要么必须指定一个有效的用户（而在此情况下该用户并不存在），要么得到的列表会包含位于私有分类（受群组保护）中的话题。

目前，我的做法是硬编码一个需要排除的分类列表，然后遍历该列表，排除所有位于这些分类中的话题。但这并非理想方案。而且，置顶话题（如“欢迎来到新论坛”等）总是出现在列表顶部……我想我也可以把它们过滤掉……但整体感觉非常 hacky。🙂

对于如何以更优雅的方式实现我的目标，有什么建议吗？

---

<div class="post-metadata">

**Author:** ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)\
**Post date:** [2020年四月27日 13:57 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457/2 "2020-04-27T13:57:44Z")

</div>

您可以回退到源（latest.rss/top.rss）吗？

---

<div class="post-metadata">

**Author:** ![pnoeric](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pnoeric/32/177144_2.png) [@pnoeric](https://meta.discourse.org/u/pnoeric)\
**Post date:** [2020年四月27日 14:23 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457/3 "2020-04-27T14:23:35Z")

</div>

这主意很巧妙，但我觉得这对我行不通，因为我的论坛是完全私密的。所以，如果我在没有有效 Discourse 会话的情况下尝试获取 RSS 源，它会被重定向到登录页面。

---

<div class="post-metadata">

**Author:** ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)\
**Post date:** [2020年四月27日 14:25 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457/4 "2020-04-27T14:25:54Z")

</div>

然后创建一个具有最低访问权限的虚拟用户，并将其视图作为后备方案？

---

<div class="post-metadata">

**Author:** ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)\
**Post date:** [2020年四月27日 14:26 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457/5 "2020-04-27T14:26:28Z")

</div>

创建一个没有特殊组隶属关系的新用户，并使用此非特权用户发起最新 API 请求。

---

<div class="post-metadata">

**Author:** ![pnoeric](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pnoeric/32/177144_2.png) [@pnoeric](https://meta.discourse.org/u/pnoeric)\
**Post date:** [2020年四月27日 14:28 UTC](https://meta.discourse.org/t/how-to-get-all-latest-top-messages-in-non-private-categories/149457/6 "2020-04-27T14:28:06Z")

</div>

嗯，这还不错。虽然还有点取巧，但我觉得比我现在的做法稍微好一些。保留一个“虚拟基础用户”，至少意味着我不必在主站代码中手动维护 Discourse 分类 ID 列表了。
