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.

1 „Gefällt mir“

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).