API経由でのプロフィール情報更新ヘルプ

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 が返されますが、実際には何も更新されません。

何か見落としていますか?

関連する質問ですが、同じアプローチでユーザー名を更新することはできますか?

ご協力ありがとうございます。

はい、これは、資格情報をヘッダーで渡す(下記参照)方法に置き換えられました。

引用符の文字 (\") が混在しています。これが原因である可能性があります。:thinking:

「いいね!」 4

@Arkshineさん、ありがとうございます。引用符がすべて同じ"であることを確認しましたが、まだ動作しません。

問題が何であるか分かりません。

UIで変更を行う際に何が起こるかを確認するために、Reverse engineer the Discourse API を試しましたか?

/u/test_one.jsonのようなPUTリクエストを送信すると、私には機能します。

「いいね!」 1

@JammyDodger さん、ありがとうございます。ご提案いただいた通り、管理UIで名前を更新してからネットワークタブを確認しました。おっしゃる通り、更新は別のURL(/usersの代わりに/u)で行われますが、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

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