Comment puis-je lier à un profil utilisateur par son ID utilisateur ?

J’ai une table members dans la base de données de mon application, où je stocke des informations spécifiques à l’application pour un sous-ensemble de membres. L’une des colonnes est discourse_user_id. Je souhaite afficher un lien vers le profil Discourse du membre. Est-il possible de le faire uniquement avec leur identifiant utilisateur ?

Je ne stocke pas discourse_user_name car l’utilisateur peut le modifier, et je devrais alors m’inquiéter de maintenir la synchronisation.

La seule solution qui me vient à l’esprit est de faire une requête API vers /admin/users/<user-id>.json pour obtenir leur nom d’utilisateur, mais cela impliquerait un grand nombre de requêtes sur une page d’index où je liste les membres avec des liens vers leurs profils.

L’autre idée qui me vient est de créer un plugin pour ajouter une route, mais cela semble être beaucoup d’effort pour quelque chose dont je m’attends à ce que d’autres personnes aient déjà parlé. Je voulais donc vérifier s’il existe déjà une autre solution.

Une idée consiste à ajouter un identifiant externe dans l’enregistrement de l’utilisateur, puis vous pourriez utiliser /by-external/:external_id. Une autre option est d’utiliser un webhook pour notifier votre base de données externe en cas de changement de nom d’utilisateur. Une troisième possibilité est tout simplement de désactiver la modification des noms d’utilisateur. Après un rapide examen de discourse/config/routes.db, je ne vois aucune route qui utilise user_id.

Merci @pfaffman, c’est très utile. Je pense qu’utiliser un ID externe serait idéal, car cela résout également un autre problème — faire le lien dans le sens inverse.

En fouillant dans la documentation de l’API et avec un client REST, je ne vois cependant pas comment mettre à jour ce champ. Puis-je l’utiliser sans activer SSO ? (Et, même si j’activais SSO, pourrais-je le mettre à jour de manière programmatique ?)

Désolé, je ne sais pas sur le moment. Je devrais fouiller dans le code source.

Il n’y a aucune raison de mettre à jour la clé externe ; les clés ne sont pas censées changer.

L’autre chose que vous pourriez faire est de faire en sorte que les deux systèmes s’appuient sur le fait que l’adresse e-mail reste la même.

Je pense que le SSO est ce que vous voudrez mettre en place.

Vous pouvez essayer ceci :

https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true

Vous devrez transmettre la clé API dans les en-têtes, comme documenté ailleurs.

1 « J'aime »

J’ai créé un plugin pour activer cette fonctionnalité :

/user-by-id/123/summary redirige vers /u/janedoe/summary, etc.

Je suis encore surpris d’avoir dû faire cela, mais au moins, cela fonctionne !

2 « J'aime »