我在论坛上找到了一些通过 API 更新用户信息的方法,但无法使其正常工作。我是一名初级开发人员,所以也许我遗漏了显而易见的东西。
首先,我尝试让这个示例工作:
curl -X PUT -d 'name=new name’ -L 'https://mysite.com/users/user12345.json?api_key=mykey\u0026api_username=username'
但我收到“BAD CSRF”,所以我尝试了这个:
curl -X PUT \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: mykey" \
-H "Api-Username: username" \
-d '{"name”: “new name"}' \
-L 'https://mysite.com/users/user12345.json'
这返回“success”:“OK”,然后是该用户的全部 json,但实际上并未进行任何更新。
我遗漏了什么吗?
另外一个相关的问题是:您是否能够使用相同的方法更新用户名?
感谢您的帮助。
是的,这种方式已被弃用,取而代之的是在标头中传递凭据(如下所示)。
您混合使用了引号字符:\" 和 ”。这可能是原因所在。
4 个赞
感谢 @Arkshine。我已经确保所有的引号字符都相同 \",但它仍然不起作用。
搞不清楚问题出在哪里。
您是否尝试过 Reverse engineer the Discourse API 来检查使用 UI 进行更改时会发生什么?
当我向 /u/test_one.json 发送 PUT 请求时,它对我来说是有效的。
1 个赞
感谢 @JammyDodger。我按照您的建议在管理界面中更新了名称,然后在网络选项卡中查看。正如您所提到的,它在不同的 URL(/u 而不是 /users)下执行更新,但当我更改 URL 时,它仍然不起作用。
在“表单数据”下,我正在查看请求,它是:name: "newname",就像我发送的一样。
据我所知,一切看起来都对,但它仍然没有更新。我很困惑。
好的……我花了更多时间浏览论坛,发现了一个 7 年前的类似问题。结果发现,如果将 Content-Type 更新为“application/json; charset=utf-8”,它就可以工作了!
我还有一个最后的问题:如何通过 API 更新用户名?
我尝试过这样做,但它不起作用:
-d '{\"name”: “new name\", \"username\": \"new username\"}' \\
1 个赞
好的……我终于弄明白了。我在这里留下一个简短的摘要,以防将来有人想知道如何做到这一点。我在论坛上找到的其他答案已经过时了。
通过 API 更新名称:
curl -X PUT -H "Content-Type: application/json; charset=utf-8" -H "Api-Key: mykey" -H "Api-Username: username" -d '{"name": “mynewname"}' -L 'https://mysite.com/u/user12345.json'
通过 API 更新用户名:
curl -X PUT -H "Content-Type: application/json; charset=utf-8" -H "Api-Key: myapikey" -H "Api-Username: username" -d '{"new_username": "mynewusername"}' -L 'https://mysite.com/u/user12345/preferences/username.json'
4 个赞
system
(system)
关闭
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.