TL;DR : Discourse affiche une « Erreur d’intégration » quelle que soit la liste des hôtes autorisés dans les paramètres d’intégration.
J’ai un site publié sur foo.com qui intègre les commentaires d’un forum Discourse hébergé sur forum.foo.com, ce qui fonctionne parfaitement. Lorsque je visite par exemple https://foo.com/blog/2019-11-22/foo-0.9.6-released, les commentaires intégrés s’affichent sans problème. Dans ce cas, le code JavaScript d’intégration présent dans le code source de la page ressemble à ceci :
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'https://foo.com/blog/2019-11-22/foo-0.9.6-released' };
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
J’ai également une version de développement du site qui tourne localement sur localhost, où je rencontre des problèmes d’intégration : le système affiche constamment « Erreur d’intégration » au lieu d’afficher les commentaires générés et renvoyés par le forum. Autrement dit, je vois le logo du forum et un lien vers celui-ci en haut à droite de la zone d’intégration, mais au lieu d’une liste de commentaires, seul le message d’erreur s’affiche.
Lorsque je visite par exemple http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/, qui correspond à la page équivalente du site de production, le code JavaScript d’intégration présent dans le code source de la page ressemble à ceci :
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/' };
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
J’ai testé avec et sans le slash final dans le paramètre discourseEmbedUrl, sans aucune différence.
Je n’ai pas d’accès direct au serveur sur lequel le forum est hébergé, mais je suis allé dans le panneau d’administration du forum et j’ai essayé d’ajouter plusieurs hôtes autorisés dans les paramètres d’intégration. Les paramètres actuels, pour le site de production qui fonctionne correctement avec l’intégration, sont les suivants :
« Hôtes autorisés », « Nom de classe », « Liste blanche des chemins », « Publier dans la catégorie »
foo.com, <vide>, /blog/.*, blog
Ce que j’ai ajouté pour tenter de faire fonctionner la version de développement locale de mon site :
« Hôtes autorisés », « Nom de classe », « Liste blanche des chemins », « Publier dans la catégorie »
localhost, <vide>, /blog/.*, blog
localhost:1313, <vide>, /blog/.*, blog
<mon adresse IP externe/publique telle que vue par le serveur du forum>, <vide>, /blog/.*, blog
<mon adresse IP externe/publique telle que vue par le serveur du forum>:1313, <vide>, /blog/.*, blog
Mais rien de tout cela ne fonctionne ; je continue d’obtenir le même message « Erreur d’intégration ».
Je suis réticent à plonger dans le code source pour essayer de déboguer ce problème ; je préférerais obtenir des informations sur ce que Discourse vérifie lorsqu’il décide de générer ce message d’erreur. Quelqu’un peut-il me l’expliquer et m’indiquer comment résoudre ce problème ? Cela devrait être assez simple, mais Discourse se comporte ici comme une boîte noire.
J’ai lu tout le contenu de Embed Discourse comments on another website via Javascript, mais cela ne fournit pas d’informations plus utiles.

