Créer un utilisateur par programme avec un ID utilisateur OAuth2

Existe-t-il un moyen d’insérer une ligne dans la table user_associated_account via l’API REST ?

Pour vous donner un peu de contexte, je dois pouvoir créer des utilisateurs sur notre instance Discourse et les lier à notre fournisseur OAuth2.
Lorsque les utilisateurs se connectent depuis l’interface de Discourse (via le plugin OAuth2 Basic), leur compte est lié et je peux récupérer leur identifiant utilisateur Discourse à partir de leur UID externe grâce à GET /u/by-external/oauth2_basic/{external_uid}.
Cependant, lorsque nous créons des utilisateurs via l’API REST (POST /users.json), je ne vois aucun moyen de lier leur compte à leur compte OAuth2 correspondant (s’ils ne se connectent pas manuellement sur Discourse).

Pour information, le plugin OAuth2 Basic a implémenté le nouveau système Auth::ManagedAuthenticator : Move to ManagedAuthenticator by angusmcleod · Pull Request #21 · discourse/discourse-oauth2-basic · GitHub

Voici ce que j’ai essayé :

  • J’ai consulté la documentation de l’API mais n’ai trouvé aucune indication.
  • J’ai identifié la route API utilisée pour récupérer les comptes associés d’un utilisateur : GET /u/{username}/emails.json. Cependant, cette route ne semble pas supporter la méthode HTTP PUT et n’expose pas les champs de la table user_associated_accounts (provider_name, provider_uid et user_id).
  • J’ai également examiné les paramètres de Discourse pour voir s’il existait une option liée à ce problème, sans succès.
  • J’ai vérifié sur meta.discourse.org mais n’ai trouvé aucune solution.

Toute aide serait grandement appréciée ! Merci :slight_smile:

Tant que vous créez l’utilisateur avec la même adresse e-mail que celle fournie par OAuth, vous n’avez pas à vous inquiéter.

Merci pour votre retour !
J’aimerais ne pas m’en soucier, mais je dois pouvoir récupérer l’utilisateur à partir de mon ID de fournisseur (GET /u/by-external/oauth2_basic/{external_uid}).
Cela n’est pas possible tant que l’utilisateur ne se connecte pas manuellement via l’interface (je souhaite éviter cela).

Je penserais exposer les associated_accounts de cette manière lors de la création d’un nouvel utilisateur :

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

Ce serait parfait !

Remarque : cela ressemble aux paramètres provider et extern_uid de l’API Gitlab Users (Users API | GitLab Docs).