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.
1 « J'aime »

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.

1 « J'aime »