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.

1 Mi Piace

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)