Lorsque j’ai initialement configuré SSO avec WordPress, les utilisateurs se rendaient sur l’URL du forum, étaient redirigés vers la page de connexion WordPress et, après la connexion, étaient renvoyés vers le forum.
Mais à un moment donné, cela a changé et je ne sais pas comment. Désormais, après la connexion WordPress, l’utilisateur est redirigé vers le tableau de bord WordPress.
Autre chose d’étrange : lorsque je me déconnecte de Discourse, un message « Vous avez été déconnecté » s’affiche, mais si je clique sur le bouton « Actualiser », je ne suis pas réellement déconnecté. Je peux toujours publier, répondre, etc. Parfois, je dois me déconnecter 2 ou 3 fois avant d’être vraiment déconnecté. Donc cela fonctionne, mais pas de manière cohérente.
Avez-vous des idées sur la façon de résoudre ce problème ?
Il est probable qu’un plugin WordPress interfère avec vos routes et/ou se branche sur vos fonctions de connexion. Désactivez simplement la moitié de vos plugins WordPress et voyez quelle moitié cause le problème, puis désactivez la moitié des plugins de ce groupe, etc.
Commencez par les plugins liés à l’authentification, aux adhésions et à la connexion.
La réponse de Michael est probablement correcte. De plus, avez-vous installé le plugin WooCommerce sur votre site ? Si oui, vous pouvez ajouter un code à votre site pour résoudre le problème.
Le problème de déconnexion peut être lié au problème de redirection de connexion. Si la désactivation des plugins ne résout pas le problème, faites-le-nous savoir.
Le problème de connexion semble être un conflit avec le plugin MemberPress. Je pense donc que je dois creuser pour trouver une solution avec eux.
Le problème de déconnexion était causé par un plugin de redirection. Il y avait une redirection vers la page d’accueil qui posait problème avec la déconnexion de Discourse.
Michael – je vous remercie vraiment pour votre aide et vos conseils sur les plugins qui pourraient être en cause. Cela m’a fait gagner un temps précieux, car ce sont les deux premiers plugins que j’ai vérifiés.
Simon – merci de m’avoir parlé du plugin WordPress Health Check. Je n’en avais jamais entendu parler auparavant, mais je vais l’installer maintenant et m’en servir pour le dépannage à l’avenir.
Vérifiez les paramètres du plugin pour tout redirigement de connexion qu’il crée. Il semble qu’il redirige les utilisateurs vers leur page de profil avant que le plugin WP Discourse ne puisse les rediriger vers Discourse. Si vous trouvez la solution, veuillez la publier ici. Si vous ne trouvez pas la solution, faites-le-nous savoir. Je peux essayer d’installer MemberPress sur mon site local.
Oui, le plugin Health Check est excellent pour déboguer ce genre de problème.
Je n’ai pas réussi à résoudre ce problème avec MemberPress. Il s’agit clairement d’un conflit avec MemberPress, car c’est le seul plugin pour lequel j’ai défini une URL de redirection spécifique, à savoir /jump.
Je ne suis pas vraiment sûr de la suite à donner. Lorsque quelqu’un se connecte depuis mon site WordPress, je souhaite rediriger ces personnes vers /jump après la connexion. MemberPress remplit donc correctement cette tâche.
Cependant, lorsque les personnes accèdent à mon site Discourse, par exemple community.mydomain.com, elles sont redirigées vers la page de connexion de WordPress, mais après la connexion, elles sont également envoyées vers /jump au lieu d’être renvoyées vers le forum.
Avez-vous des idées sur ce que je pourrais essayer d’autre ?
Savez-vous quels paramètres vous avez activés dans MemberPress pour créer la redirection ? J’ai une version récente de MemberPress installée sur mon site de développement, mais je n’ai pas réussi à reproduire ni le problème de connexion, ni le problème où les utilisateurs ne se déconnectent pas de Discourse.
Votre site WordPress est-il installé sur une configuration multisite ou s’agit-il d’une installation WordPress standard ?
Il est possible que le problème que vous rencontrez avec les utilisateurs qui ne se déconnectent pas de Discourse soit dû au fait que votre site Discourse est configuré pour exiger une connexion afin de voir le contenu. Dans ce cas, rafraîchir la page de Discourse déclenchera une connexion SSO. Pour déconnecter complètement les utilisateurs de Discourse, vous devez également les déconnecter de WordPress. Cela peut être fait en saisissant https://example.com/?request=logout dans le paramètre de site logout redirect de Discourse. Remplacez example.com par le domaine de votre site WordPress. Faites-moi savoir si vous avez fait cela et que cela ne fonctionne toujours pas.
Il s’agit d’une installation WordPress standard (pas de multisite). La déconnexion a été corrigée.
Le problème concerne la redirection après la connexion, c’est-à-dire que les utilisateurs ne sont pas redirigés vers le site Discourse après la connexion sur WordPress. Il semble que MemberPress les envoie vers une page par défaut de WordPress.
Savez-vous si vous avez configuré la page vers laquelle les utilisateurs sont redirigés dans les options de MemberPress ? Si oui, quelle option avez-vous définie pour cela ?
Intéressant ! Je dois laisser ce paramètre en place pour que les membres, lorsqu’ils se rendent sur le site WordPress et cliquent sur Connexion, puissent le faire.
Auriez-vous une idée d’un code PHP que je pourrais ajouter à mon functions.php afin de contourner cela pour la connexion Discourse ?
Le problème se produit dans la fonction track_and_override_login_redirect_mepr. Cette fonction est liée au filtre MemberPress mepr-process-login-redirect-url. Il est possible de s’intercaler dans cette fonction et de la remplacer en vérifiant la requête qui a été définie. Cela peut être réalisé avec la fonction wp_get_referer().
Je ne pense pas avoir le temps de régler cela aujourd’hui, mais je m’y pencherai à nouveau dans les prochains jours.
J’ai relu cela pendant que c’était encore frais dans mon esprit. L’ajout de la fonction suivante dans le fichier functions.php de mon thème a résolu le problème pour moi, mais cela n’a pas été beaucoup testé.
La fonction se connecte au filtre 'mepr-process-login-redirect-url' avant que MemberPress ne s’y connecte. Elle vérifie ensuite la valeur des paramètres de requête pour voir si la requête a été initiée par une demande SSO de Discourse. Si c’est le cas, elle redirige l’utilisateur vers la page d’accueil de WordPress avec les paramètres de requête intacts. Cela permettra au plugin WP Discourse de compléter la demande SSO. Je pense que cela peut encore fonctionner si votre page d’accueil est protégée par MemberPress, mais il serait bon de le confirmer.
Si la requête n’a pas été initiée par Discourse, la méthode statique MeprProductsCtrl::track_and_override_login_redirect_mepr est appelée avec les arguments qui ont été transmis au filtre.
Je suis un peu hésitant à recommander l’ajout de ce code à votre site de production. Si vous essayez, assurez-vous de pouvoir retirer le code de votre serveur au cas où il casserait votre site. Assurez-vous de le tester avec autant de niveaux d’utilisateurs/abonnements que possible.
C’est GÉNIAL, Simon ! Tu es une star de la musique !
Je suis aussi réticent à l’idée d’ajouter cela à mon site de production tout de suite. Je pense que je vais devoir configurer un site de test pour bien faire les choses.