如何通过 API 更改用户字段

(编辑:解决方案见第 2 楼:如何通过 API 更改用户字段)

@sam,你曾在一个现已关闭的话题中提到,关于有人想使用 API 更新用户记录中的自定义字段时说过:“该字段需要被加入白名单。你能将其添加到 /admin/customize/user_fields 吗?还是说这个字段是完全对用户隐藏的?”

有两个小问题:

  1. /admin/customize/ 端点是什么?
  2. 如何“将字段加入白名单”?(这是什么意思——加入白名单以便 API 能够访问它,是这样吗?!)

我已经尝试搜索这两个问题的答案,但一无所获。希望你能(或其他了解的人)提供帮助。

顺便一提,我的最终目标看似简单:我想能够通过 API 设置或获取自定义用户字段的值。然而,我发现很难找到关于如何实现这一点的清晰答案。:-(

目前我了解到:

  1. 你可以通过 SSO 大致传递自定义字段,但那不是 API。
  2. 当前端调用 API 时(通过观察 XHR 请求),自定义字段似乎仅通过数字而非名称进行引用——显然,如果我在按名称查找,而它实际上是 users[2],这会有很大影响。

如你所见,这并不显而易见 ;-)。我认为“获取”操作应该更容易,因为它会是用户记录的一部分(我现在可以通过 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"

您可以通过向 /u/<username>.json 发送 PUT 请求来更新这些字段。

/admin/customize/user_fields 是一个用于配置自定义用户字段的 UI 页面。

感谢您提供的所有这些帮助!顺便提一下,我希望能看到能够按名称引用 user_fields 的功能(这样似乎更不容易出错),但您提供的解释和信息对我而言已经非常有用了。非常感激 :slight_smile:

您是否使用相同的 POST 端点来_更新_用户?所有字段都是必需的吗?

你好!我想知道如何获取 user_fields 的索引?我应该去 Web 控制器并获取索引吗?是否有用于获取 user_fields 的 API?然后我就可以得到索引了。谢谢。

您可以向 /admin/customize/user_fields 发送 GET 请求,它将返回一个用户字段列表:

{
  "user_fields": [
    {
      "id": 2,
      "name": "Favorite OS",
      "description": "What is your favorite Operating System?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "show_on_profile": true,
      "show_on_user_card": true,
      "searchable": false,
      "position": 1
    }
  ]
}

谢谢。你的回答对我很有帮助!