Suggestion pour améliorer le développement de l'authentification intégrée

Comme l’a dit Jeff Atwood, l’email est au cœur de Discourse et nous ne devrions pas, ni ne pouvons, l’ignorer ou le contourner.

Cependant, la réalité peut être plus désordonnée que nous ne l’imaginons : certaines plateformes ne fournissent pas d’adresse email, et nous souhaitons néanmoins les intégrer à notre Discourse. La solution discourse-oauth2-basic est

discourse-oauth2-basic est un plugin OAuth2 polyvalent qui n’inclut donc aucune fonctionnalité spécifique à une plateforme particulière. Mais lorsque nous développons un authentificateur propre à une plateforme et que celle-ci ne fournit pas d’adresse email, nous pourrions souhaiter intégrer le système de notification de la plateforme plutôt que la notification par email par défaut.

Ma solution proposée consiste à créer une fausse adresse email pour chaque identité unique, du type préfixe-plateforme + id-plateforme@yourdiscours.com, à mettre en place un validateur d’email pour décider quel système de notification utiliser, ou encore à utiliser des hooks et des filtres pour définir l’expéditeur lors de l’envoi d’une notification, en choisissant entre la notification par email par défaut ou celle implémentée par l’authentificateur. Je pense qu’il s’agit d’une mise en œuvre non invasive pour l’architecture existante.

1 « J'aime »

C’est tout à fait réalisable. Par exemple, vous pouvez utiliser la connexion Steam (qui ne fournit pas d’adresse e-mail), définir des e-mails factices dans une version modifiée du plugin et utiliser les notifications push natives (disponibles sur Windows, macOS, Linux et Android) pour tous vos besoins en matière de notifications.

Cela nécessitera toujours un certain travail personnalisé pour s’intégrer à la plateforme spécifique, et chez Discourse, nous avons plusieurs clients qui utilisent une telle configuration avec un grand succès. Ce sont parmi les plus grandes instances existantes !

4 « J'aime »

Oui, mais Discourse semble envoyer les notifications d’exportation directement via Email::Sender en les codant en dur, plutôt que d’appeler un crochet d’événement de notification comme DiscourseEvent.

Comment donc « rediriger » la notification vers notre système de notification personnalisé ? Avez-vous un exemple public ?

1 « J'aime »