「Single User」レベルの API キーが作成できず、常に「All Users」にデフォルト設定されてしまいます

再現手順:

  1. https://yourdiscoursedomain.com/admin/api/keys を開く
  2. 新しいキーを選択する
  3. ユーザーレベルとして「単一ユーザー」を選択する
  4. キーを作成する
  5. 作成後にキーの詳細を開く
  6. ユーザーレベルが「すべてのユーザー」と表示される

2 つのユーザーレベルオプションの違いについては非常に不明確ですが、これは明らかにバグのようです。

(私はホスト型の Discourse サービスを利用しています)

API キーを作成するユーザーも選択しましたか?

基本的に「全ユーザー」用の API キーを使用するのが望ましいです。ただし、discourse_theme の使用など、特定の機能ではユーザーキーが必要です。

API で何を行おうとしていますか?

「いいね!」 1

ご提示いただいた手順に従えば、私も同様の現象を再現できます。単一のユーザー向けに API キーを作成する際、Discourse はフォームの「ユーザー」フィールドにユーザー名を入力することを想定しています。

「ユーザーレベル」に「単一ユーザー」が選択されているのに、「ユーザー」フィールドにユーザー名が追加されていない場合、「全ユーザー」向けの API キーが作成されてしまいます。代わりにエラーメッセージが表示されることを期待していました。これは、説明なしでフォームを送信した際に表示されるエラーと同様の挙動です。

「いいね!」 3

特定のカテゴリから投稿を取得するための「ボット」ユーザーを作成したかったのです。この Discourse インスタンスは GSuite による認証のみを使用しているため、もはや任意のユーザーを作成することはできません。「単一ユーザー」キーの場合、ボットとして割り当てる新しいユーザー名を入力できるかと期待していましたが、ユーザー名は既存のユーザーである必要があることがわかりました。ユーザー名入力欄には検証が実装されていないため、Slack の受信 Web フックのように、任意の名前を入力できないことが明確ではありませんでした。その結果、入力したユーザー名の検索時に静かに失敗し、代わりに「すべてのユーザー」キーが作成されてしまいます。

これは機能的な問題というよりは、使い勝手のバグだと思われます。こちらのドキュメントは混乱を招くものでした。「ユーザーレベル」フィールドについての説明が一切なく、「すべてのユーザー」タイプについても、スレッドのさらに下のコメントに 1 回言及されているのみでした。

すべてのユーザーに API キーを付与すれば機能しますが、「ボット」に特定のカテゴリの読み取りを許可したくない場合は別です。

@j.jaffeux さん、これはあなたのユーザー名選択コンポーネントですか?

いいえ、これは select-kit コンポーネントではありません。問題は、username ではなく description の存在のみをチェックしている点です。userMode(single/all)はクライアントサイドの値に過ぎないため、モデルがサーバーサイドで検証される際、知れるのはキーを要求し、ユーザーを提供したかどうかだけです。

これで改善するはずです。David にレビューを依頼します:

「いいね!」 7