再現手順:
https://yourdiscoursedomain.com/admin/api/keysを開く- 新しいキーを選択する
- ユーザーレベルとして「単一ユーザー」を選択する
- キーを作成する
- 作成後にキーの詳細を開く
- ユーザーレベルが「すべてのユーザー」と表示される
2 つのユーザーレベルオプションの違いについては非常に不明確ですが、これは明らかにバグのようです。
(私はホスト型の Discourse サービスを利用しています)
再現手順:
https://yourdiscoursedomain.com/admin/api/keys を開く2 つのユーザーレベルオプションの違いについては非常に不明確ですが、これは明らかにバグのようです。
(私はホスト型の Discourse サービスを利用しています)
API キーを作成するユーザーも選択しましたか?
基本的に「全ユーザー」用の API キーを使用するのが望ましいです。ただし、discourse_theme の使用など、特定の機能ではユーザーキーが必要です。
API で何を行おうとしていますか?
ご提示いただいた手順に従えば、私も同様の現象を再現できます。単一のユーザー向けに API キーを作成する際、Discourse はフォームの「ユーザー」フィールドにユーザー名を入力することを想定しています。
「ユーザーレベル」に「単一ユーザー」が選択されているのに、「ユーザー」フィールドにユーザー名が追加されていない場合、「全ユーザー」向けの API キーが作成されてしまいます。代わりにエラーメッセージが表示されることを期待していました。これは、説明なしでフォームを送信した際に表示されるエラーと同様の挙動です。
特定のカテゴリから投稿を取得するための「ボット」ユーザーを作成したかったのです。この Discourse インスタンスは GSuite による認証のみを使用しているため、もはや任意のユーザーを作成することはできません。「単一ユーザー」キーの場合、ボットとして割り当てる新しいユーザー名を入力できるかと期待していましたが、ユーザー名は既存のユーザーである必要があることがわかりました。ユーザー名入力欄には検証が実装されていないため、Slack の受信 Web フックのように、任意の名前を入力できないことが明確ではありませんでした。その結果、入力したユーザー名の検索時に静かに失敗し、代わりに「すべてのユーザー」キーが作成されてしまいます。
これは機能的な問題というよりは、使い勝手のバグだと思われます。こちらのドキュメントは混乱を招くものでした。「ユーザーレベル」フィールドについての説明が一切なく、「すべてのユーザー」タイプについても、スレッドのさらに下のコメントに 1 回言及されているのみでした。
すべてのユーザーに API キーを付与すれば機能しますが、「ボット」に特定のカテゴリの読み取りを許可したくない場合は別です。
@j.jaffeux さん、これはあなたのユーザー名選択コンポーネントですか?
いいえ、これは select-kit コンポーネントではありません。問題は、username ではなく description の存在のみをチェックしている点です。userMode(single/all)はクライアントサイドの値に過ぎないため、モデルがサーバーサイドで検証される際、知れるのはキーを要求し、ユーザーを提供したかどうかだけです。
これで改善するはずです。David にレビューを依頼します: