Meilleure façon de mettre à jour ou de créer un utilisateur existant, via l'API, à partir d'un client connecté ?

Voici le cas d’utilisation, auquel je suis sûr que beaucoup de gens ont été confrontés :

  • Avoir un tas d’utilisateurs dans Discourse
  • Avoir un système externe (fournisseur de services, Drupal) qui utilise l’API pour créer des utilisateurs Discourse et gérer les appartenances aux groupes
  • Drupal a un ensemble d’utilisateurs partiellement chevauchant. C’est-à-dire que des utilisateurs ayant la même adresse e-mail existent dans Discourse et Drupal, mais ne sont pas liés
  • Drupal utilise l’API pour synchroniser les utilisateurs, les groupes et les appartenances car les utilisateurs n’utiliseront peut-être jamais l’authentification unique (SSO) pour accéder à Discourse, s’appuyant plutôt sur les e-mails

Comportement actuel :

  • Discourse rejette parfois l’appel API pour créer un utilisateur Discourse, car un utilisateur Discourse existe déjà avec le même e-mail

Comportement souhaité :

  • Discourse lie l’utilisateur Discourse existant à l’utilisateur Drupal, via l’e-mail

Solution proposée :

  • Interroger le point de terminaison de l’API Discourse /admin/users/list/all.json?email=$email pour récupérer tous les utilisateurs ayant une adresse e-mail correspondante
  • Si l’utilisateur correspondant existe
    • Connecter les utilisateurs existants (côté Drupal)
  • sinon
    • Créer un nouvel utilisateur Discourse

Questions

  • Cela semble-t-il être une solution raisonnable, ou existe-t-il une meilleure façon de procéder ?
  • La requête API est-elle correctement formée ?
    Ni all.json ni le paramètre de chaîne de requête email ne sont documentés, et j’ai trouvé très peu d’exemples, mais ce post semble indiquer que c’est la meilleure façon de procéder.

Je ne suis pas aussi expert que certains, mais je pense que oui.

Cela me semble correct. La meilleure documentation, toujours à jour, se trouve dans Ingénierie inverse de l’API Discourse.