# 通过 API 获取用户的电子邮件地址

**URL:** https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006
**Category:** Development
**Tags:** rest-api
**Created:** [2019年七月3日 12:48 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006 "2019-07-03T12:48:02Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![paully21](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paully21/32/72673_2.png) [@paully21](https://meta.discourse.org/u/paully21)
#### Post date: [2019年七月3日 12:48 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/1 "2019-07-03T12:48:03Z")

</div>

是否可以通过 API 获取用户的当前电子邮件地址？

我们的使用场景如下：

我们允许用户通过我们的网站管理他们的 Discourse 信息。通常情况下，Discourse 仅用作邮件列表，几乎所有用户都不会访问实际的 Discourse 站点。我希望能够向用户显示 Discourse 当前使用的电子邮件地址，以便他们查看是否需要更改。

除电子邮件外，我能够获取所有其他字段的信息。

过去存在一个 API 端点 `users/{username}/emails`，但该端点似乎已不再可用。

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [2019年七月3日 13:01 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/2 "2019-07-03T13:01:08Z")

</div>

你好，

GET /users/:username.json

在以下两种情况下会显示邮箱地址：

- API KEY 持有者的用户 ID 与请求的用户名对应的用户 ID 相同
- API KEY 持有者是工作人员，且请求的用户处于暂存状态

在代码中了解更多详情：

> <https://github.com/discourse/discourse/blob/main/app/serializers/user_serializer.rb#L153>

据我所知，该代码路径近期未发生变更。

---

<div class="post-metadata">

### Author: ![paully21](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paully21/32/72673_2.png) [@paully21](https://meta.discourse.org/u/paully21)
#### Post date: [2019年七月3日 13:07 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/3 "2019-07-03T13:07:07Z")

</div>

是的，但这帮不了我。所有用户都已经活跃，用户 API 密钥将无法匹配。

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [2019年七月3日 13:09 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/4 "2019-07-03T13:09:17Z")

</div>

这个请求在我这里可以正常工作：

```plaintext
curl "http://example.com/users/joffreyjaffeux/emails.json" \
     -H 'Api-Username: joffreyjaffeux' \
     -H 'Api-Key: xxx' \
     -H 'Content-Type: application/json; charset=utf-8' \

```

---

<div class="post-metadata">

### Author: ![paully21](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paully21/32/72673_2.png) [@paully21](https://meta.discourse.org/u/paully21)
#### Post date: [2019年七月3日 13:14 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/5 "2019-07-03T13:14:31Z")

</div>

但是，如果 URL 是 `http://example.com/users/paulapostolos/emails.json`，它能正常工作吗？

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [2019年七月3日 13:17 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/6 "2019-07-03T13:17:08Z")

</div>

是的，只要以下条件成立，它就应该适用于您自己和其他用户：

```plaintext
  def can_check_emails?(user)
    is_admin? || (is_staff? && SiteSetting.moderators_view_emails)
  end

```

请注意，执行此操作将触发工作人员操作日志。

---

<div class="post-metadata">

### Author: ![paully21](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/paully21/32/72673_2.png) [@paully21](https://meta.discourse.org/u/paully21)
#### Post date: [2019年七月3日 13:25 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/7 "2019-07-03T13:25:05Z")

</div>

成功了……我之前有一些旧代码（大概是 1.4 版本左右），当时把请求设为 PUT，并且 URL 末尾没有 .json。我把它改成了 GET 请求，并更新了 URL，现在可以正常工作了。

感谢您的帮助！

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [2019年七月3日 13:25 UTC](https://meta.discourse.org/t/get-e-mail-address-for-a-user-via-api/122006/8 "2019-07-03T13:25:55Z")

</div>


