Plusieurs sites Discourse sur un seul WordPress avec wp-discourse

J’ai un client qui a un site WordPress qui gère les abonnements et un forum connecté à wp-discourse. Tout va bien.

Mais maintenant, il souhaite ajouter des sites Discourse supplémentaires qui s’authentifient tous sur le site WordPress unique. J’ai essayé de copier la configuration du premier site Discourse sur le second, mais WordPress redirige vers le premier site Discourse. J’ai alors pensé que je pourrais faire du premier site Discourse un serveur discourse_connect pour le second, mais cela ne fonctionne toujours pas (il redirige également vers le premier site Discourse et le second ne se connecte pas).

Existe-t-il un moyen d’avoir un site WordPress unique qui fournisse l’authentification pour plusieurs sites Discourse ?

2 « J'aime »

Si vous prévoyez d’utiliser l’authentification unique pour plus de deux plateformes, la solution la plus correcte est d’utiliser keycloak.
Cette approche est intéressante car nous n’avons pas à penser à un serveur d’authentification unique et à une connexion plus simple via les réseaux sociaux (et pas seulement).
Vous pouvez ajouter et supprimer n’importe quel site sans perdre l’utilisateur.

Le plugin WP Discourse n’est pas configuré pour gérer cela, mais cela devrait être possible.

Je commencerais par ajouter un paramètre d’URL site au paramètre discourse_connect_url de Discourse. Sur WordPress, utilisez le paramètre site pour définir le bon site Discourse vers lequel rediriger ici :

Vous devriez probablement également gérer l’appel à sync_sso qui se produit ici : wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

Je ne suis pas certain à ce sujet, mais vous pourriez avoir besoin d’ajouter site aux variables de requête autorisées dans cette fonction (afin que WordPress ne supprime pas le paramètre) : wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

Idéalement, les changements ci-dessus pourraient être réalisés avec des crochets action et filter sur WordPress. Il semble que des crochets devraient être ajoutés au code pour cela.

Je suppose que la spécification de cela n’implique pas la publication d’articles de WordPress sur plusieurs sites Discourse. Si tel est le cas, les changements requis seraient un peu plus complexes.

Je vous ferai savoir si je pense à d’autres problèmes.

Modifier : il faut réfléchir à la manière dont l’identifiant utilisateur Discourse est utilisé sur WordPress pour s’assurer qu’il n’y aura pas de conflits entre plusieurs sites - un seul utilisateur sur WordPress pourrait potentiellement avoir des comptes sur plusieurs sites WordPress. Ils auraient un identifiant utilisateur Discourse différent sur chaque site.

Modifier : le plus gros problème que je puisse voir est si le paramètre “Créer ou synchroniser les utilisateurs Discourse à la connexion” est activé sur les sites WordPress. Il effectue un appel API à la route sync_sso de Discourse. Vous auriez besoin d’un moyen de savoir sur quel site Discourse synchroniser ou créer l’utilisateur. Vous auriez également besoin d’une clé API Discourse pour chaque site. Cela semble faisable, mais ajouterait une certaine complexité.

3 « J'aime »

Cela semble vaguement possible. Oui, il ne se soucie pas de la publication, juste de l’authentification et, je suppose, de la poussée de groupes depuis WooCommerce ou similaire.

Je suppose que cela signifie ajuster les appartenances aux groupes d’un utilisateur sur un site Discourse particulier lorsqu’il effectue un achat sur le site WordPress. Cela semble faisable, mais il serait préférable de le faire avec une requête API vers la route sync_sso. Le plugin WP Discourse a des fonctions qui peuvent être utilisées pour cela, mais elles utilisent l’URL et la clé API de Discourse qui sont définies sur les pages d’options du plugin : https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. Peut-être que le plugin pourrait ajouter des crochets de filtre à ces paramètres afin qu’ils puissent être définis conditionnellement.

3 « J'aime »

Nous explorons une configuration similaire, je serais donc également intéressé par une solution.

1 « J'aime »

Je pense qu’il n’a pas répondu quand je lui ai demandé s’il voulait jouer pour le développement (je soupçonne qu’il est occupé par d’autres choses).

Si vous avez un budget, cela pourrait aider.

C’est encore exploratoire, donc je n’ai pas vraiment de budget. Mais je peux fournir une aide au développement et peut-être un peu de financement. Si votre client est également disposé à contribuer, nous pourrons peut-être mettre en commun des fonds.

1 « J'aime »