明示的なユーザーIDでAPI経由でユーザーを作成

こんにちは。私の独自 SSO サービスからプライベートな Discourse インスタンスへユーザーを移行し、ログインさせるために、Discourse API と OAuth2 プラグインを使用しています。これまでに、プログラムで全ての SSO ユーザーを Discourse に正常に移行することに成功しました。プログラムによる移行時、新しいユーザーは Discourse 固有の自動インクリメント ID で作成されます。

私の質問は、API を使用して、明示的な ID を持つユーザーを作成できるかどうかです。つまり、ユーザーに id:22 を割り当てた場合、/admin/users/22.json でそのユーザーを照会できるでしょうか。

POST ボディに ‘id’ と ‘external_id’ パラメータを渡してみましたが、動作しませんでした。

編集:また、API を通じて特定のユーザー ID が与えられた場合、そのユーザー名を変更する方法はあるでしょうか。

よろしくお願いいたします。

IDを割り当てることはできません。

外部ID用のルートが存在します:

    get "#{root_path}/by-external/:external_id" => "users#show", constraints: { external_id: /[^\/]+/ }

サイト設定 sso_overrides_username を有効にすれば(これは有効な設定だと思います)、APIを使ってユーザー名を変更する必要はありません。

ありがとうございます。しかし、ユーザー作成時に external_id を持っていないため、外部 SSO との関連付けはユーザーが Discourse にログインするまで行われません。ユーザー移行中に external_id を用いてプログラム的にユーザーを関連付ける方法がない限り、external_id を使用することはできないと思います。

すでに Discourse にこれらのユーザーを関連付けるデータはありますか?なぜユーザーを作成する必要があるのですか?

SSO から多数の既存ユーザーを Discourse へ移行する必要があります。これらのユーザーが Discourse に直接ログインすることはないかもしれませんが、Discourse API を通じてメッセージを送信したり、通知を取得したりできるようにする必要があります。そのため、プログラム的に事前にユーザーを作成する必要があります。さらに、ユーザーは SSO 上でユーザー名を変更できるため、ID を指定して Discourse 上のユーザー名も更新できるようにする必要があります。

新しいトピックを開始したのでしょうか、それとも他の何かが削除されてしまったのでしょうか?

SSO はアカウントを保持しており、ユーザーレコードを作成するために使用できる外部 ID を知っているはずです。その後、その ID を将来使用できます。しかし、何らかの理由でそれが不可能な場合、メールアドレスでユーザーを検索してみてください。実際のメールアドレスが変更される可能性もあるため、架空のメールアドレスをもう一つ作成することも検討できます。そして、それを将来的な識別子として使用できるよう、何らかの方法で非表示にするとよいでしょう。