OAuth2ユーザーIDでプログラム的にユーザーを作成する

user_associated_account テーブルに REST API を介して行を挿入する方法はありますか?

参考までに、Discourse インスタンスでユーザーを作成し、それらを OAuth2 プロバイダーにリンクできるようにする必要があります。
ユーザーが Discourse UI からログインする場合(OAuth2 Basic プラグイン経由)、アカウントがリンクされ、GET /u/by-external/oauth2_basic/{external_uid} を使用して外部 UID から Discourse のユーザー ID を取得できます。
ただし、REST API(POST /users.json)からユーザーを作成する場合、アカウントを対応する OAuth2 アカウントにリンクする方法が見当たりません(ユーザーが手動で Discourse にログインしない限り)。

参考までに、OAuth2 basic プラグインは新しい Auth::ManagedAuthenticator システムを実装しました: https://github.com/discourse/discourse-oauth2-basic/pull/21

私が試したこと:

  • API ドキュメントを確認しましたが、手がかりは見つかりませんでした。
  • 1人のユーザーから関連アカウントを取得するために呼び出される API ルートを見つけました: GET /u/{username}/emails.json。しかし、このルートは HTTP PUT メソッドをサポートしていないように見え、user_associated_accounts テーブルのフィールド(provider_nameprovider_uiduser_id)を公開していません。
  • また、この問題に関連する設定がないか Discourse の設定を確認しましたが、成功しませんでした。
  • meta.discourse.org を確認しましたが、解決策は見つかりませんでした。

ご助力いただければ幸いです。ありがとうございます :slight_smile:

OAuth で登録されているメールアドレスと同じメールアドレスでユーザーを作成すれば、心配する必要はありません。

「いいね!」 1

フィードバックをありがとうございます!
気にせず済めばいいのですが、プロバイダーIDからユーザーを取得できるようにする必要があります(GET /u/by-external/oauth2_basic/{external_uid})。
これは、ユーザーがUIを通じて手動でログインするまで不可能です(それを避けたいと考えています)。

新しいユーザーを作成する際に、associated_accounts を以下のように公開することを提案します:

POST /users.json
{
  username: "something",
  email: "test@test.com",
  associated_accounts: [
    {
      provider_name: "oauth2_basic",
      provider_uid: "12345"
    }
  ]
}

これは完璧です!

注:これは GitLab ユーザー API の provider および extern_uid パラメータ(Users API | GitLab Docs