# Добавление невидимых пользовательских полей в API

**URL:** https://meta.discourse.org/t/adding-non-visible-user-custom-fields-to-the-api/276618
**Category:** Site Management
**Tags:** rest-api, how-to, user-custom-fields, users
**Created:** [25.Август.2023 14:46:39 UTC](https://meta.discourse.org/t/adding-non-visible-user-custom-fields-to-the-api/276618 "2023-08-25T14:46:39Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [25.Август.2023 14:46:40 UTC](https://meta.discourse.org/t/adding-non-visible-user-custom-fields-to-the-api/276618/1 "2023-08-25T14:46:40Z")

</div>

> 🔖 Это руководство объясняет, как предоставлять данные пользовательских полей через API, не отображая их на карточке пользователя.\>
> 
> 🙋 Требуемый уровень доступа: Администратор

Это руководство проведет вас через процесс предоставления доступа к данным пользовательских полей через API без их отображения на карточке пользователя. Это может быть полезно, когда вам нужно программно получать доступ к пользовательским данным, сохраняя их скрытыми от общего просмотра.

## Создание пользовательского поля

1. Сначала создайте пользовательское поле. Подробные инструкции см. в [руководстве по созданию и настройке пользовательских полей](https://meta.discourse.org/t/create-and-configure-custom-user-fields/113192).
2. После настройки сохраните поле.  
 ![test user custom field](https://global.discourse-cdn.com/meta/original/4X/3/1/6/31623658e1ecda7bf96645d26282151e6027749f.png)

## Поиск ID пользовательского поля

1. Перейдите по адресу `/admin/config/user-fields.json` в вашем браузере.
2. Найдите только что созданное пользовательское поле и запишите его ID.  
 ![user_fields json](https://global.discourse-cdn.com/meta/original/4X/5/6/0/56077a67b3ca13aa4c29647467d3ecd8c39afcaa.png)

## Настройка доступа через API

1. Перейдите в настройки администратора вашего сайта.
2. Найдите параметр `public user custom fields` (публичные пользовательские поля) или `staff user custom fields` (пользовательские поля для сотрудников):
  - Используйте `public user custom fields`, если хотите, чтобы данные были доступны всем пользователям API.
  - Используйте `staff user custom fields`, если хотите ограничить доступ только для ключей API сотрудников.

3. Введите имя пользовательского поля в формате `user_field_X`, где X — это ID, который вы записали ранее.  
Например, если ID вашего пользовательского поля равен 7, введите `user_field_7`.  
 ![user_field_X](https://global.discourse-cdn.com/meta/original/4X/3/a/4/3a48731bbf8a5ee63447a4c754361341d7426e58.png)

## Доступ к данным пользовательского поля

После настройки данные пользовательского поля будут включены в эндпоинт `/u/[USERNAME].json` в разделе “User Fields” (Пользовательские поля).

 ![user fields - user json](https://global.discourse-cdn.com/meta/original/4X/6/4/3/64370e228d2492d193271fd04906423bcf49fba4.png)

## Поиск пользователей по значениям пользовательских полей

Вы можете искать пользователей по значениям их пользовательских полей с помощью API:

1. Убедитесь, что в настройках пользовательского поля отмечена опция “searchable” (доступно для поиска).  
 ![image](https://global.discourse-cdn.com/meta/original/4X/0/f/a/0fae82138df105e865c2ce611dd93b8f87f639c9.png)
2. Используйте эндпоинт `/directory_items.json` с необходимыми параметрами запроса.

Вот пример вызова API:

```plaintext
https://yourdomain.com/directory_items.json?period=weekly&order=likes_received&name=SearchTerm&user_field_ids=1|2

```

- `user_field_ids`: Укажите, какие пользовательские поля нужно искать (например, `user_field_ids=5` для поиска только в поле с ID 5).
- `name`: Поисковый термин для поиска в пользовательских полях, именах пользователей и, возможно, полных именах.

_Примечание: Этот поиск не ограничивается только пользовательскими полями и может возвращать результаты на основе совпадений имени пользователя или полного имени._

Для получения дополнительной информации о доступных параметрах обратитесь к [документации API](https://docs.discourse.org/#tag/Users/operation/listUsersPublic).

## Дополнительные ресурсы

- [Creating and configuring custom user fields](https://meta.discourse.org/t/create-and-configure-custom-user-fields/113192)
- [Discourse API Docs](https://docs.discourse.org/#tag/Users/operation/listUsersPublic)
- [Reverse engineer the Discourse API](https://meta.discourse.org/t/reverse-engineer-the-discourse-api/20576)

---

<div class="post-metadata">

### Author: ![Krischan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/krischan/32/47290_2.png) [@Krischan](https://meta.discourse.org/u/Krischan)
#### Post date: [18.Октябрь.2023 19:53:14 UTC](https://meta.discourse.org/t/adding-non-visible-user-custom-fields-to-the-api/276618/2 "2023-10-18T19:53:14Z")

</div>

Отлично, спасибо! Есть ли способ найти пользователя по значению в пользовательском поле через API?

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [18.Октябрь.2023 22:06:18 UTC](https://meta.discourse.org/t/adding-non-visible-user-custom-fields-to-the-api/276618/3 "2023-10-18T22:06:18Z")

</div>

Да, используя параметры запроса:

Например,  
[https://unicyclist.com/directory\_items.json?period=weekly&order=likes\_received&name=Flansberrium+G29&user\_field\_ids=1|2](https://unicyclist.com/directory_items.json?period=weekly&order=likes_received&name=Flansberrium+G29&user_field_ids=1%7C2)

Ограничьте поиск по пользовательским полям, изменив последний параметр `user_field_ids=1|2`.  
Например, `user_field_ids=5` для поиска только в пользовательском поле с ID 5.

Также доступно несколько других параметров, которые вы можете найти в [документации API](https://docs.discourse.org/#tag/Users/operation/listUsersPublic) (документация не упоминает пользовательские поля, но вы можете легко [провести реверс-инжиниринг API](https://meta.discourse.org/t/reverse-engineer-the-discourse-api/20576?u=canapin)).

Пользовательское поле (поля) должно иметь отмеченную опцию «Доступно для поиска», чтобы запрос работал:

 ![image](https://global.discourse-cdn.com/meta/original/4X/0/f/a/0fae82138df105e865c2ce611dd93b8f87f639c9.png)

Также обратите внимание, что запрос будет искать не _только_ в пользовательских полях, но и в именах пользователей, а возможно, и в полных именах. На мой взгляд, встроенной функции для фильтрации только по пользовательским полям не существует.
