通过API更新自定义用户字段

我一直在尝试逆向工程用户字段值的更新。

我通过遵循 Reverse engineer the Discourse API 中的步骤来完成此操作,我编辑了一个测试用户,并记下了浏览器网络选项卡中发生的情况。

我可以看到我需要 PUT 到此 URL:https://example.com/u/my-username-here.json

我有点困惑,因为它没有显示 json 负载,而是显示了一些表单数据。负载是:user_fields%5B1%5D=some+dji%2C+some+Autel\u0026user_fields%5B5%5D=%40UKDroneClub\u0026user_fields%5B6%5D=%40iKiteFlyer\u0026user_fields%5B8%5D=test\u0026timezone=Europe%2FLondon\u0026default_calendar=none_selected

我只想更新一个用户字段值,
它已进行 URL 编码:user_fields%5B8%5D=test
解码后,它显示为:user_fields[8]=test

(8 = 我想更新的用户字段的 ID)

我该如何将此表单数据值转换为 json 负载,以便我可以 PUT 它?:thinking:

2 个赞

我不确定我在这里做错了什么,但我可以通过 API 调用更新用户的“关于我”部分,但无法更新任何 user_fields

如果我在编辑用户时监控我的浏览器,我可以看到它 PUT 了以下内容:

bio_raw=aboutmetest&user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=qwerty&timezone=Europe%2FLondon&default_calendar=none_selected

我正在使用以下代码进行 PUT API 调用:

' 添加一些标头
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' 添加一些表单正文参数
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

每次我进行 API 调用时,果然 bio_raw 的值都会更新为当前时间戳(作为测试)。

但不知何故,user_fields[8] 的值根本没有更新。没有错误,只是没有更新。

我尝试过将其进行 URL 编码为 user_fields%5B8%5D,也尝试过纯文本 user_fields[8],但都没有效果。

我是否遗漏了什么显而易见的东西?:thinking:

啊啊啊啊 :man_facepalming:

是的,是的,我就是。

这个:

阻止了当 API 调用由用户执行时对 user_field 的编辑。

当然了 :exploding_head:

如果我重构我的 API 调用并由 system 执行,它就能正常工作 :roll_eyes:

6 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.