이 포럼에서 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 데이터를 표시하지만, 실제로는 업데이트가 이루어지지 않습니다.
무엇을 놓치고 있는 걸까요?
관련해서 한 가지 더 질문이 있습니다: 같은 방식으로 사용자 이름(username)도 업데이트할 수 있을까요?
도와주셔서 감사합니다.
네, 이 방식은 헤더에 자격 증명을 전달하는 방식(아래와 같이)으로 대체되어 비추천(deprecated)되었습니다.
인용부호 문자를 혼용했습니다: "와 ”. 이것이 원인이 될 수 있습니다. 
@Arkshine 감사합니다. 모든 인용 기호가 동일한 "인지 확인했는데도 여전히 작동하지 않습니다.
문제가 무엇인지 모르겠습니다.
UI를 사용하여 변경 사항을 수행할 때 어떤 일이 발생하는지 확인하기 위해 Reverse engineer the Discourse API 을 시도해 보셨나요?
저는 /u/test_one.json 등으로 PUT 요청을 보낼 때 정상적으로 동작합니다.
@JammyDodger 감사합니다. 말씀해 주신 대로 관리자 UI에서 이름을 업데이트한 후 네트워크 탭을 확인해 보았습니다. 말씀하신 대로 다른 URL(/users 대신 /u)로 업데이트가 이루어지긴 하는데, URL을 변경해도 여전히 작동하지 않습니다.
"Form Data"에서 요청을 살펴보니 제가 보내는 것과 똑같이 name: "newname"으로 되어 있습니다.
제가 보기에는 모든 것이 올바르게 설정되어 있는데도 업데이트가 되지 않습니다. 도무지 원인을 알 수가 없습니다.
음… 포럼을 더 열심히 뒤져본 끝에 7년 전에 발생한 비슷한 문제를 발견했습니다. Content-Type을 "application/json; charset=utf-8"으로 업데이트하면 작동합니다!
마지막으로 하나만 더 여쭤볼게요: API를 통해 사용자 이름(username)을 어떻게 업데이트하나요?
아래와 같이 시도해 보았지만 작동하지 않습니다:
-d '{"name": "new name", "username": "new 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'