Possible d'envoyer un lien de connexion par e-mail via API ?

Bonjour ! J’apprécie vraiment l’utilisation de l’API Discourse !

En suivant le guide sur le reverse engineering de l’API, je rencontre un problème pour obtenir l’envoi d’un lien de connexion via l’API.

Contexte de mon projet
J’ai créé un service SSO pour un hackerspace local afin que les utilisateurs puissent se connecter à notre instance Discourse via le système d’adhésion du hackerspace.

Cependant, certaines personnes ont peut-être utilisé une adresse e-mail différente dans le système d’adhésion par rapport à celle de Discourse. Comme la connexion locale est désactivée lorsque SSO est activé, je souhaite que les utilisateurs puissent cliquer sur « Envoyez-moi un lien de connexion par e-mail » pour se connecter, puis mettre à jour leur adresse e-mail s’ils le souhaitent (ou continuer à utiliser le lien de connexion, peu importe).

Objectif
Je souhaite envoyer un lien de connexion à l’utilisateur @domaine.co.uk via l’API.

J’ai essayé ceci :

curl -X POST "https://discourse.<site>.org.uk/u/email-login" --data "{\"login\":\"user\"%\"40domain.co.uk\"}" -H "Api-Key: xxxxx" -H "Api-Username: system" -H "Content-Type: application/json"

Ce que je reçois en retour est :

<html><body>Vous êtes en train d'être <a href="https://discourse.<site>.org.uk/">redirigé</a>.</body></html>

Si je n’inclus pas la clé API, je reçois [BAD CSRF].

Donc, ce sur quoi je suis bloqué, c’est : comment puis-je simplement demander à Discourse d’envoyer un lien de connexion par e-mail à l’utilisateur @domaine.co.uk via l’API ?

Merci beaucoup pour toute aide. Je vais continuer à essayer différentes choses pour voir ce qui fonctionne.


P.S. Je ne voudrais pas avoir à utiliser une astuce comme :
Faire une requête vers /session/csrf et sauvegarder le jeton CSRF,
Puis faire une requête vers /u/email-login avec le jeton CSRF.

Est-il possible de faire cela uniquement avec une clé API ?

Merci !
:slight_smile:

Pour faire suite, l’utilisation de la route CSRF suivie de la route du lien par e-mail est-elle la méthode appropriée ?

Y a-t-il une implémentation de cela dans l’API lorsqu’une clé API est fournie ?

Comment votre service SSO s’interface-t-il avec Discourse ? Si vous utilisez DiscourseConnect, je pense que le point de terminaison /u/email-login sera désactivé.

Merci pour votre réponse. Et oui, cela utilise Discourse Connect.

Je pensais la même chose, alors j’ai désactivé Discourse Connect et j’ai essayé d’obtenir un lien de connexion par e-mail, mais je n’ai pas réussi à le faire fonctionner, ce qui m’a conduit à produire le résultat affiché dans mon message ci-dessus.

Si l’envoi d’un lien par e-mail est désactivé lorsque Discourse Connect est activé, je devrai repenser ma méthode pour lier les comptes du service SSO du système d’adhésion à Discourse.

La méthode la plus simple, comme vous l’avez mentionné, consiste à associer les comptes par adresse e-mail. Lorsque cela n’est pas possible, nous utilisons plusieurs approches :

  1. Associer les utilisateurs à l’aide d’un autre identifiant unique. Vous pouvez créer des associations DiscourseConnect pour un utilisateur via la console. Cela ne fonctionnera que si vous disposez d’un autre identifiant cohérent entre Discourse et le fournisseur d’identité.

  2. (le plus courant) permettre aux utilisateurs de créer de nouveaux comptes, puis leur demander de contacter un administrateur pour demander que le nouveau compte soit « fusionné » avec l’ancien (en utilisant le bouton situé en bas de la page d’administration des utilisateurs). Cela associera automatiquement les adresses e-mail et créera l’association DiscourseConnect.

Merci pour votre réponse.

L’approche consistant à fusionner les comptes est probablement celle que je choisirai.

Ce serait une excellente fonctionnalité de rendre ce processus autonome, par exemple via une API où les utilisateurs pourraient se connecter via un lien par e-mail, puis mettre à jour leur adresse e-mail pour synchroniser les deux comptes.
Ou peut-être en permettant à un utilisateur de s’authentifier en fournissant son adresse e-mail et son mot de passe Discourse, ainsi qu’une nouvelle adresse e-mail.

Merci encore pour votre temps.