こんにちは!
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 が含まれないのか、ご存知の方がいれば教えてください。
blake
(Blake Erickson)
2020 年 11 月 13 日午前 3:00
2
レスポンス内の以下のメッセージ:
は、確認メールの内容です:
not_found: "Dein Einladungstoken ist ungültig. Bitte <a href='%{base_url}/about'>kontaktiere das Team</a>."
not_found_json: "Dein Einladungstoken ist ungültig. Bitte kontaktiere das Team. "
not_found_template: |
<p>Deine Einladung zu <a href="%{base_url}">%{site_name}</a> wurde bereits zurückgezogen.</p>
<p>Wenn du dein Passwort noch weißt, kannst du dich <a href="%{base_url}/login">anmelden</a>.</p>
<p>Ansonsten kannst du <a href="%{base_url}/password-reset">dein Passwort zurücksetzen</a>.</p>
error_message: "Fehler beim Akzeptieren der Einladung aufgetreten. Bitte kontaktiere den Administrator dieser Seite."
user_exists: "Es ist nicht nötig, <b>%{email}</b> einzuladen, er/sie <a href='%{base_path}/u/%{username}/summary'>hat schon ein Konto!</a>"
confirm_email: "<p>Du bist fast fertig! Wir haben eine Aktivierungsmail an deine E-Mail-Adresse geschickt. Bitte folge den Anweisungen in der E-Mail, um dein Konto zu aktivieren.</p><p>Wenn keine E-Mail ankommt, überprüfe bitte deinen Spam-Ordner.</p>"
cant_invite_to_group: "Sie sind nicht berechtigt, Benutzer zu bestimmten Gruppe(n) einzuladen. Stellen Sie sicher, dass Sie Eigentümer der Gruppe(n) sind, in die Sie einladen möchten."
disabled_errors:
sso_enabled: "Einladungen sind deaktiviert, da SSO aktiviert ist."
local_logins_disabled: "Einladungen sind deaktiviert, da die Einstellung „Lokale Anmeldungen aktivieren“ deaktiviert ist."
invalid_access: "Du hast nicht die Erlaubnis, die angeforderte Ressource zu betrachten."
bulk_invite:
file_should_be_csv: "Die hochzuladende Datei sollte im CSV-Format vorliegen."
max_rows: "Die ersten %{max_bulk_invites} Einladungen wurden versandt. Versuche, die Datein in kleinere Teile aufzuspalten."
error: "Es gab einen Fehler beim Hochladen dieser Datei. Bitte versuche es später noch einmal."
invite_link:
つまり、ユーザーに確認メールが送信されます。ユーザーがそのメール内のリンクをクリックすると、アカウントが作成されます。
Discourse の最新バージョンをお使いですか?"active": true を指定すれば、確認メールは送信されません。詳細は Creating user via API - #11 by blake をご覧ください。
「いいね!」 2
こんにちは!
ご回答ありがとうございますが、私の問題は解決しませんでした。
私の例のリクエストではパラメータ「active: true」を使用しましたが、レスポンスでは「active: false」が返ってきました。そのため、ユーザーをアクティブ化できません。もしかすると、ユーザーが作成されていないことが原因かもしれません。
それとは別に:
リクエストで「active: true」パラメータを送信しない場合、ユーザーにメールが送信されません。
何かアイデアはありますか?
ありがとうございます!
blake
(Blake Erickson)
2020 年 11 月 13 日午後 10:19
4
Discourseのバージョンをお知らせいただけますか?それにより、ご報告いただいた問題を再現できるか確認できます。
はい、バージョン 2.6.0.beta5 を使用しています。
私たちの環境には更新プログラムは提供されていません。
「いいね!」 1
blake
(Blake Erickson)
2020 年 11 月 16 日午後 9:37
6
ありがとうございます。古いバージョンをお使いではないか確認したかっただけです。
おそらく、このリクエスト時に認証情報が正しく渡されていないのだと思います。このエンドポイントは特別なもので、サインアップフォームで使用されるため、実際には 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
動作しました。認証情報が正しく渡されていませんでした。
ご助力いただき、誠にありがとうございます。素晴らしいサポートです!
「いいね!」 1
system
(system)
クローズされました:
2020 年 12 月 17 日午前 9:18
8
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.