API経由でユーザーを追加できません

こんにちは!

API を通じて以下のリクエストでユーザーを追加しようとしています:

POST https://discourse.example.de/users
{
    "name": "Bob Tester",
    "email": "example address",
    "password": "#######",
    "username": "testi",
    "active": true,
    "approved": false
}

API キーとユーザーはリクエストのヘッダーに定義されています。

このリクエストに対する応答は以下の通りです:

Status: 200 OK
{
    "success": true,
    "active": false,
    "message": "<p>ほぼ完了です!アクティベーションメールを <b>example address</b> 宛に送信しました。アカウントを有効化するには、メール内の指示に従ってください。</p><p>メールが届かない場合は、スパムフォルダをご確認ください。</p>"
}

しかし、Discourse にはユーザーが追加されていないようです。

ドキュメントの例応答(Discourse API Docs ID が含まれています。

なぜ応答にユーザー ID が含まれないのか、ご存知の方がいれば教えてください。

レスポンス内の以下のメッセージ:

は、確認メールの内容です:

つまり、ユーザーに確認メールが送信されます。ユーザーがそのメール内のリンクをクリックすると、アカウントが作成されます。

Discourse の最新バージョンをお使いですか?"active": true を指定すれば、確認メールは送信されません。詳細は Creating user via API - #11 by blake をご覧ください。

「いいね!」 2

こんにちは!

ご回答ありがとうございますが、私の問題は解決しませんでした。

私の例のリクエストではパラメータ「active: true」を使用しましたが、レスポンスでは「active: false」が返ってきました。そのため、ユーザーをアクティブ化できません。もしかすると、ユーザーが作成されていないことが原因かもしれません。

それとは別に:

リクエストで「active: true」パラメータを送信しない場合、ユーザーにメールが送信されません。

何かアイデアはありますか?

ありがとうございます!

Discourseのバージョンをお知らせいただけますか?それにより、ご報告いただいた問題を再現できるか確認できます。

はい、バージョン 2.6.0.beta5 を使用しています。
私たちの環境には更新プログラムは提供されていません。

「いいね!」 1

ありがとうございます。古いバージョンをお使いではないか確認したかっただけです。

おそらく、このリクエスト時に認証情報が正しく渡されていないのだと思います。このエンドポイントは特別なもので、サインアップフォームで使用されるため、実際には API 認証なしでも利用可能です。あなたが受け取っているレスポンスは、ユーザーがサインアップした際に、それが API リクエストではないと検知された場合に表示されるものです。

認証を必要とする別の API リクエスト(カテゴリの作成など)を試して、動作するか確認してみてください。また、管理用 API ページでキーが最後に使用された日時を確認し、ユーザー作成の API リクエストで正しく使用されているかも確認できます。

認証なしで JSON リクエストを行うことで、あなたの問題を再現できました:

認証なしの JSON リクエスト

curl -i -sS -X POST "http://localhost:3000/users.json" -H "Content-Type: application/json" -d "{\"name\": \"8525f374d470a2e3f22c\", \"active\": \"true\", \"username\": \"8525f374d470a2e3f22c\", \"email\": \"8525f374d470a2e3f22c@example.com\", \"password\": \"65d18e465472452771e02b3462260ea1\"}"

HTTP/1.1 200 OK

{"success":true,"active":false,"message":"<p>あと少しです!アクティベーションメールを <b>8525f374d470a2e3f22c@example.com</b> へ送信しました。メール内の指示に従ってアカウントを有効化してください。</p><p>受信しない場合は、スパムフォルダもご確認ください。</p>"}

対照的に:

認証ありの JSON リクエスト

curl -i -sS -X POST "http://localhost:3000/users.json" -H "Content-Type: application/json" -H "Api-Key: 079fb2bb12d3b436bb11bde8eb58aaa9a36560fa7d79b14b3087aa40b1ebc2c4" -H "Api-Username: blake.erickson" -d "{\"name\": \"da4be85b6046f9c9b9e1\", \"active\": \"true\", \"username\": \"da4be85b6046f9c9b9e1\", \"email\": \"da4be85b6046f9c9b9e1@example.com\", \"password\": \"65d6f0589c5f234de4ad31662b3a17a2\"}"

HTTP/1.1 200 OK

{"success":true,"active":true,"message":"アカウントが有効化され、利用可能です。","user_id":29}
「いいね!」 1

動作しました。認証情報が正しく渡されていませんでした。

ご助力いただき、誠にありがとうございます。素晴らしいサポートです!:slight_smile:

「いいね!」 1

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