# 使用external\_id调用API回复

**URL:** https://meta.discourse.org/t/external-id-api/390573
**Category:** Development
**Tags:** rest-api
**Created:** [2025年十二月6日 07:47 UTC](https://meta.discourse.org/t/external-id-api/390573 "2025-12-06T07:47:04Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![ikaros](https://avatars.discourse-cdn.com/v4/letter/i/bbe5ce/32.png) [@ikaros](https://meta.discourse.org/u/ikaros)
#### Post date: [2025年十二月6日 07:47 UTC](https://meta.discourse.org/t/external-id-api/390573/1 "2025-12-06T07:47:04Z")

</div>

是否有可能使用SSO的external\_id来调用API回复帖子，以避免每次都需要先通过external\_id确定用户的用户名

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [2025年十二月6日 08:17 UTC](https://meta.discourse.org/t/external-id-api/390573/2 "2025-12-06T08:17:33Z")

</div>

不，那是不可能的。

> [@ikaros](#):
>
> 为了避免每次都通过 `external_id` 确定用户名

不过你不需要“每次”都确定它，你可以选择在调用方缓存它。

---

<div class="post-metadata">

### Author: ![ikaros](https://avatars.discourse-cdn.com/v4/letter/i/bbe5ce/32.png) [@ikaros](https://meta.discourse.org/u/ikaros)
#### Post date: [2025年十二月6日 08:26 UTC](https://meta.discourse.org/t/external-id-api/390573/3 "2025-12-06T08:26:57Z")

</div>

如果A用户通过discourse更改了名称，恰好B用户这时也改了名称，且改为了A之前的名称，如果通过缓存获取A的名称，有没有可能导致A用户的回复被绑定到B用户

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [2025年十二月6日 08:43 UTC](https://meta.discourse.org/t/external-id-api/390573/4 "2025-12-06T08:43:24Z")

</div>

是的，尽管这听起来有点理论化，但这绝对是可能的。最好是能够根据用户ID进行身份验证。

在 user.updated 上设置一个 webhook 来刷新该用户的缓存！

---

<div class="post-metadata">

### Author: ![ikaros](https://avatars.discourse-cdn.com/v4/letter/i/bbe5ce/32.png) [@ikaros](https://meta.discourse.org/u/ikaros)
#### Post date: [2025年十二月6日 09:07 UTC](https://meta.discourse.org/t/external-id-api/390573/5 "2025-12-06T09:07:43Z")

</div>

是的，这应是一个比较好的解决办法。感谢。  
但是否还有可能webhook因为网络波动丢包，导致缓存未刷新。  
虽然可以通过缓存TTL一定程度上解决，但在TTL缓存失效前仍然有可能出现问题。  
最后，比较安全的还是通过external\_id获取准确的用户名。  
当然，这些都是我个人理论上的猜测

---

<div class="post-metadata">

### Author: ![supermathie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/supermathie/32/507518_2.png) [@supermathie](https://meta.discourse.org/u/supermathie)
#### Post date: [2025年十二月6日 16:30 UTC](https://meta.discourse.org/t/external-id-api/390573/6 "2025-12-06T16:30:54Z")

</div>

目前尚不可能，但您可以通过自己的补丁来修改身份验证代码，以将例如以下内容视为：

```plaintext
api-username: external_id:BB111

```

等同于：

```plaintext
api-username: bbaggins

```
