pnoeric
(Eric)
1
(编辑:解决方案见第 2 楼:如何通过 API 更改用户字段)
@sam,你曾在一个现已关闭的话题中提到,关于有人想使用 API 更新用户记录中的自定义字段时说过:“该字段需要被加入白名单。你能将其添加到 /admin/customize/user_fields 吗?还是说这个字段是完全对用户隐藏的?”
有两个小问题:
/admin/customize/ 端点是什么?
- 如何“将字段加入白名单”?(这是什么意思——加入白名单以便 API 能够访问它,是这样吗?!)
我已经尝试搜索这两个问题的答案,但一无所获。希望你能(或其他了解的人)提供帮助。
顺便一提,我的最终目标看似简单:我想能够通过 API 设置或获取自定义用户字段的值。然而,我发现很难找到关于如何实现这一点的清晰答案。:-(
目前我了解到:
- 你可以通过 SSO 大致传递自定义字段,但那不是 API。
- 当前端调用 API 时(通过观察 XHR 请求),自定义字段似乎仅通过数字而非名称进行引用——显然,如果我在按名称查找,而它实际上是
users[2],这会有很大影响。
如你所见,这并不显而易见 ;-)。我认为“获取”操作应该更容易,因为它会是用户记录的一部分(我现在可以通过 API 获取用户记录),但在能够通过 API“设置”它之前,我无法确认这一点。
无论如何……一旦我终于弄明白这一点,我该如何以有助于下一个尝试这样做的人的方式分享这些知识?
blake
(Blake Erickson)
2
您可以通过在 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 请求来更新这些字段。
riking
(Kane York)
3
/admin/customize/user_fields 是一个用于配置自定义用户字段的 UI 页面。
pnoeric
(Eric)
4
感谢您提供的所有这些帮助!顺便提一下,我希望能看到能够按名称引用 user_fields 的功能(这样似乎更不容易出错),但您提供的解释和信息对我而言已经非常有用了。非常感激 
mattdm
(Matthew Miller)
5
您是否使用相同的 POST 端点来_更新_用户?所有字段都是必需的吗?
你好!我想知道如何获取 user_fields 的索引?我应该去 Web 控制器并获取索引吗?是否有用于获取 user_fields 的 API?然后我就可以得到索引了。谢谢。
blake
(Blake Erickson)
7
您可以向 /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
}
]
}