サイトにDiscourseを統合するためにAPI(pydiscourse経由)を使用しています。
API経由でユーザーをDiscourseグループに追加する際、pydiscourseはDiscourse API URLにPUTメソッドを使用します。
/admin/groups/{group_id}/members.json
…そして「usernames」変数経由でユーザー名を渡します。
ユーザー名に「.」が含まれていても問題ありませんが、その「.」が最後の文字として現れる場合、APIは次のようなエラーメッセージを返します。
You supplied invalid parameters to the request: usernames
「いいね!」 1
pfaffman
(Jay Pfaffman)
2
ユーザー名にピリオドを含めることはできないため、これは予期された応答です。ソースを確認しようとしましたが、末尾にドットを付けてアカウントを作成しようとすると、無効になります。
「いいね!」 4
迅速なご対応ありがとうございます、Jayさん。そのAPIエンドポイントでユーザーのメールを「ユーザー名」として送信できるかどうか、また、それによってDiscourseがメールでユーザーを検索できるかどうか、ご存知でしょうか?(SSOを使用してDjangoアプリとDiscourseを接続しているため、Discourseには各ユーザーの両方の識別子があるはずです)
「いいね!」 1
pfaffman
(Jay Pfaffman)
4
ああ!はい、知っています。先日、ユーザーをグループに追加するエンドポイントにメールアドレスを使用できることに気づきました。ただし、管理者以外のルートだったかもしれません。フィールド名としてメールアドレスを含めるだけです。
ただし、Discourse Connectを使用している場合は、ログイン時にグループを管理できるため、APIで手間をかけるよりもおそらくそちらの方が良いでしょう。
「いいね!」 1
フォローありがとうございます。
Discourse Connect を使用していますが、API も使用しています。
ところで、管理者権限のないルートだったのかもしれません と言及されていましたね。
では、その PUT リクエストは次のようになります。
/groups/{group_id}/members.json
ペイロードは 'email': (ユーザーのメールアドレス) となり、Discourse は私のユーザーがそのグループにユーザーを追加できる管理者権限を持っていることを認識するということでしょうか?
(すみません、なぜ同じ操作に 2 つのルートがあるのか、よく理解できていません…)
pfaffman
(Jay Pfaffman)
6
そうだと思います。How to reverse engineer the Discourse APIv を使ってパスを特定しました。そして、ソースを見て、ユーザーIDとメールアドレスも機能することを確認しました。
はい、SSOはログイン時にグループを更新するだけなので、APIが解決策となります。