Я нашёл несколько примеров в этих форумах по обновлению информации о пользователе через API, но не могу заставить их работать. Я начинающий разработчик, возможно, я упускаю что-то очевидное.
Сначала я попытался запустить этот пример:
curl -X PUT -d 'name=new name' -L 'https://mysite.com/users/user12345.json?api_key=mykey&api_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 для пользователя, но фактического обновления не происходит.
Что я упускаю?
Кстати: можно ли обновить имя пользователя тем же способом?
Спасибо за помощь.
Да, этот способ устарел в пользу передачи учётных данных в заголовке (как показано ниже).
Вы перепутали кавычки: " и ”. Возможно, это и есть причина. 
Спасибо, @Arkshine. Я убедился, что все кавычки одинаковые ", но всё равно не работает.
Не могу понять, в чём проблема.
Вы пробовали перейти по ссылке Reverse engineer the Discourse API, чтобы проверить, что происходит, когда вы используете интерфейс для внесения изменений?
У меня это работает при отправке PUT-запроса, например, на /u/test_one.json
Спасибо, @JammyDodger. Я сделал так, как вы посоветовали: обновил имя в административном интерфейсе и затем проверил вкладку Network. Как вы и упоминали, обновление происходит по другому URL (/u вместо /users), но даже при изменении URL это всё равно не работает.
В разделе “Form Data” я вижу запрос: name: "newname", точно так же, как я его отправляю.
Насколько я могу судить, всё выглядит правильно, но обновление всё равно не происходит. В тупике.
Хорошо… Я потратил гораздо больше времени на изучение форумов и нашел похожую проблему семилетней давности. Оказалось, что если обновить заголовок Content-Type до “application/json; charset=utf-8”, всё заработает!
У меня остался один вопрос: как обновить имя пользователя через API?
Я пробовал сделать что-то вроде этого, но это не работает:
-d '{"name": "новое имя", "username": "новое имя пользователя"}' \
Хорошо… Я наконец-то разобрался в этом. Оставлю краткое резюме здесь на случай, если кто-то в будущем будет искать, как это сделать. Другие ответы, которые я нашел на форумах, устарели.
Чтобы обновить имя через 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'