Benutzer programmatisch mit OAuth2-Benutzer-ID erstellen

Gibt es eine Möglichkeit, über die REST-API einen Eintrag in die Tabelle user_associated_account einzufügen?

Um Ihnen etwas Kontext zu geben: Ich muss in der Lage sein, Benutzer in unserer Discourse-Instanz zu erstellen und diese mit unserem OAuth2-Anbieter zu verknüpfen.
Wenn sich Benutzer über die Discourse-Benutzeroberfläche anmelden (über das OAuth2 Basic Plugin), wird ihr Konto verknüpft, und ich kann ihre Discourse-Benutzer-ID über ihre externe UID mit GET /u/by-external/oauth2_basic/{external_uid} abrufen.
Wenn wir jedoch Benutzer über die REST-API erstellen (POST /users.json), sehe ich keine Möglichkeit, ihr Konto mit dem entsprechenden OAuth2-Konto zu verknüpfen (sofern sie sich nicht manuell bei Discourse anmelden).

Als Info: Das OAuth2 Basic Plugin hat das neue System Auth::ManagedAuthenticator implementiert: Move to ManagedAuthenticator by angusmcleod · Pull Request #21 · discourse/discourse-oauth2-basic · GitHub

Meine Versuche:

  • Ich habe die API-Dokumentation durchsucht, konnte aber keinen Hinweis finden.
  • Ich habe herausgefunden, welche API-Route aufgerufen wird, um die verknüpften Konten eines Benutzers abzurufen: GET /u/{username}/emails.json. Diese Route unterstützt jedoch scheinbar keine HTTP-Methode PUT und stellt keine Felder der Tabelle user_associated_accounts zur Verfügung (provider_name, provider_uid und user_id).
  • Ich habe auch in den Discourse-Einstellungen nach etwas gesucht, das mit diesem Problem zusammenhängen könnte, ohne Erfolg.
  • Ich habe auf meta.discourse.org nach einer Lösung gesucht und nichts gefunden.

Jede Hilfe wird sehr geschätzt! Danke :slight_smile:

Solange du den Benutzer mit derselben E-Mail-Adresse erstellst, die OAuth verwendet, musst du dir keine Sorgen machen.

Vielen Dank für Ihr Feedback!
Ich würde gerne nicht darüber besorgt sein, aber ich muss in der Lage sein, einen Benutzer über meine Provider-ID abzurufen ( GET /u/by-external/oauth2_basic/{external_uid}).
Dies ist nicht möglich, bis sich der Benutzer manuell über die Benutzeroberfläche anmeldet (ich möchte das vermeiden).

Ich würde associated_accounts beim Erstellen eines neuen Benutzers so einbinden:

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

Das wäre perfekt!

Hinweis: Dies ähnelt den Parametern provider und extern_uid der Gitlab-Benutzer-API (Users API | GitLab Docs).