Как изменить поля пользователя через API

(Редактирование: решение во втором посте: как изменять поля пользователей через API)

@sam, вы упоминали (в сообщении в теме, которая сейчас закрыта) касательно того, кто хотел использовать API для обновления пользовательского поля в записи пользователя: «поле должно быть внесено в белый список; можете ли вы добавить его в /admin/customize/user_fields, или это поле должно быть полностью скрыто от пользователей?»

Два быстрых вопроса:

  1. Что такое endpoint /admin/customize/?
  2. Как «добавить поле в белый список»? (Что это означает — внести его в белый список, чтобы API мог к нему получить доступ, каким-то образом?!)

Я искал ответы на оба этих вопроса, но безрезультатно. Надеюсь, вы (или кто-то другой, кто знает) сможете помочь.

Кстати, моя конечная цель кажется простой: я хочу иметь возможность устанавливать и получать значение пользовательского поля пользователя через API. Однако я обнаруживаю, что получить четкий ответ о том, как это сделать, невероятно сложно. :frowning:

Пока я выяснил следующее:

  1. Можно как-то передавать пользовательские поля через SSO, но это не API.
  2. Пользовательские поля, похоже, ссылаются только по номеру, а не по имени, когда фронтенд вызывает API (при наблюдении за XHR-запросом). Очевидно, что это существенно меняет дело, если я ищу их по имени, а на самом деле это users[2].

Как видите, это неочевидно :wink: и я предполагаю, что получение данных проще, так как они будут частью записи пользователя (которую я сейчас могу получить через API), но я не могу это подтвердить, пока не смогу установить значение через API.

В любом случае… когда я наконец разберусь с этим, как я могу поделиться этими знаниями так, чтобы помочь следующему человеку, который попытается это сделать?

Вы можете создать пользователя с пользовательскими полями через API, передав user_fields[1] следующим образом:

curl -i -sS -X POST "http://localhost:3000/users"  \
-H "Content-Type: multipart/form-data;"  \
-H "Api-Key: d19b5a38ed13745f4c5..."  \
-H "Api-Username: system"  \
-F "name=cbbc7188c201b59ebc06"  \
-F "username=cbbc7188c201b59ebc06"  \
-F "email=cbbc7188c201b59ebc06@example.com"  \
-F "password=b6629ed30b4bc3de32ce452d171540b0"  \
-F "active=true"  \
-F "approved=true"  \
-F "user_fields[1]=a874d830b60"  \
-F "user_fields[2]=732418b131b"

А обновить их можно, отправив PUT-запрос на /u/<username>.json

/admin/customize/user_fields — это страница интерфейса, где настраиваются пользовательские поля.

Спасибо за всю эту помощь! К слову, мне бы очень хотелось видеть возможность обращения к user_fields по их имени (кажется, это гораздо менее хрупкое решение?), но это объяснение и информация, которую вы мне предоставили, невероятно полезны. Я очень ценю это :slight_smile:

Используется ли тот же конечный пункт POST для обновления пользователя? Все ли поля обязательны?

Привет! Я хочу узнать, как получить индекс полей пользователя (user_fields)? Мне нужно перейти к веб-контроллеру и получить его? Есть ли API для получения полей пользователя? Тогда я смогу получить индекс. Спасибо.

Вы можете отправить GET-запрос к /admin/customize/user_fields, и он вернёт список пользовательских полей:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Любимая ОС",
      "description": "Какая ваша любимая операционная система?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}

Спасибо! Ваш ответ очень помог мне!