API経由でユーザーを作成した際に奇妙な現象が発生しました

API の users.json をテストする際、Postman でユーザーを作成すると正常に動作し、デフォルトでアクティブ化されます。つまり、active=true が機能しています。

しかし、Node.js のコードで同じパラメータを使用してユーザーを作成すると、active=true が機能しなくなります。ただし、成功メッセージは返ってきます。

success: true,
active: false,

なぜでしょうか。バックエンド側でもその状態を確認できません。

私の推測では、あなたの Node.js コードが API キーを正しく渡していないため、active パラメータを上書きする権限が与えられていないのだと思います。もしコードのスニペットをここに共有していただければ、お手伝いできるかもしれません。

こんにちは、David さん。ありがとうございます。

以下が私のリクエストです。

{
 "url": "users.json",
 "method": "post",
 "data": {
      "api_key": "57d06a163190ee90de1118ac2adbaf5eeb5aa93d4d02dbe8f5d424c388f126e294c",
      "api_username": "Nathan001",
      "name": "tokgood",
      "email": "tokgood@qq.com",
      "password": "64c6457d-b815-4e87-8ea1-e66becd710bc",
      "username": "2cx9pyCMyn",
      "active": true,
      "approved": true
 },
 "headers": {
      "common": {
           "Accept": "application/json, text/plain, */*"
      },
      "delete": {},
      "get": {},
      "head": {},
      "post": {
           "Content-Type": "application/x-www-form-urlencoded"
      },
      "put": {
           "Content-Type": "application/x-www-form-urlencoded"
      },
      "patch": {
           "Content-Type": "application/x-www-form-urlencoded"
      },
      "content-type": "multipart/form-data"
 },
 "baseURL": "https://www.tuntry.com/",
 "transformRequest": [
      null
 ],
 "transformResponse": [
      null
 ],
 "timeout": 60000,
 "xsrfCookieName": "XSRF-TOKEN",
 "xsrfHeaderName": "X-XSRF-TOKEN",
 "maxContentLength": -1
}

API ユーザーとキーを二度確認しましたが、問題ありません。

Axios で POST リクエストをラップしました。

   const post = (url, data) => service.post(url, {
   api_key: Config.discourse.api_key,
   api_username: Config.discourse.api_username,
  ...data,
 }
)

Node についてはあまり詳しくありませんが、見たところ問題なさそうです。

一つ試せる方法として、API 認証情報をパラメータではなく HTTP ヘッダーで送信することがあります。パラメータ経由での送信は非推奨となっており、管理パネルで警告が表示される可能性があります。ヘッダー名は Api-KeyApi-Username です(アンダースコアではなくハイフンに注意してください)。詳細は こちら をご覧ください。

素晴らしいですね!Api-KeyApi-Username を追加し、ヘッダーに 'content-type': 'application/json', を追加することで解決しました!