Creare programmaticamente un utente con ID utente OAuth2

C’è un modo per inserire una riga nella tabella user_associated_account tramite la REST API?

Per fornirti un contesto, ho bisogno di poter creare utenti sulla nostra istanza di Discourse e collegarli al nostro provider OAuth2.
Quando gli utenti accedono dall’interfaccia utente di Discourse (tramite il plugin OAuth2 Basic), il loro account viene collegato e posso ottenere il loro ID utente Discourse dal loro UID esterno utilizzando GET /u/by-external/oauth2_basic/{external_uid}.
Tuttavia, quando creiamo utenti tramite la REST API (POST /users.json), non vedo alcun modo per collegare il loro account al corrispondente account OAuth2 (se non accedono manualmente a Discourse).

A titolo informativo, il plugin OAuth2 basic ha implementato il nuovo sistema Auth::ManagedAuthenticator: Move to ManagedAuthenticator by angusmcleod · Pull Request #21 · discourse/discourse-oauth2-basic · GitHub

Cosa ho provato:

  • Ho consultato la documentazione dell’API ma non ho trovato alcun indizio.
  • Ho individuato quale route dell’API viene chiamata per ottenere gli account associati di un utente: GET /u/{username}/emails.json. Tuttavia, questa route non sembra supportare il metodo HTTP PUT e non espone i campi della tabella user_associated_accounts (provider_name, provider_uid e user_id).
  • Ho anche esaminato le impostazioni di Discourse per vedere se c’era qualcosa di correlato a questo problema, ma senza successo.
  • Ho controllato su meta.discourse.org ma non ho trovato una soluzione.

Qualsiasi aiuto è molto apprezzato! Grazie :slight_smile:

Finché crei l’utente con lo stesso indirizzo email gestito da OAuth, non devi preoccuparti.

Grazie per il tuo feedback!
Vorrei non preoccuparmene, ma ho bisogno di poter recuperare l’utente tramite il mio ID provider (GET /u/by-external/oauth2_basic/{external_uid}).
Questo non è possibile finché l’utente non effettua manualmente il login tramite l’interfaccia (vorrei evitare questo).

Penso che esporre associated_accounts in questo modo durante la creazione di un nuovo utente sarebbe ideale:

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

Sarebbe perfetto!

Nota: questo è simile ai parametri provider e extern_uid dell’API GitLab Users (Users API | GitLab Docs)