Faire en sorte que Discourse reconnaisse les comptes vérifiés dans WordPress (et WooCommerce) pour SSO

Suite à la discussion de Comment désactiver la vérification des e-mails dans Discourse ? :

Discourse ne reconnaît pas nos comptes vérifiés. Voici quelques informations sur la configuration actuelle de notre site :

J’utilise le plugin WP Discourse avec WordPress comme fournisseur SSO.

Paramètres SSO actuels <img>

J’utilise actuellement WooCommerce (WC) pour gérer les inscriptions de nouveaux utilisateurs, ici : https://pickleballist.com/my-account

J’utilise un plugin appelé Booster for WC, qui ajoute des fonctionnalités supplémentaires à WC, notamment la possibilité d’exiger une vérification par e-mail avant qu’un utilisateur puisse accéder à son compte.

Options du plugin <img>

E-mail de vérification reçu <img>

Après que l’utilisateur a cliqué sur le lien dans son e-mail d’activation de compte, il est redirigé vers sa page /my-account/ dans WordPress. Si une personne tente de se connecter avec ses identifiants d’inscription sans avoir cliqué sur le lien de vérification, elle reçoit un message indiquant que son compte doit d’abord être vérifié, avec un lien pour « renvoyer l’e-mail de vérification ».

Si vous visitez la page « Utilisateurs » dans la console d’administration, vous pouvez facilement voir quels comptes ont été vérifiés et lesquels ne l’ont pas.

Comptes utilisateurs avec indication de vérification <img>

Malheureusement, après que l’utilisateur a vérifié son e-mail et tente ensuite de visiter nos forums sur https://forums.pickleballist.com, il n’est pas automatiquement connecté. :disappointed_face: Mais le pire, c’est que lorsqu’il clique sur le bouton « Se connecter » sur les forums, on lui demande de consulter son e-mail et de cliquer sur le lien « Confirmez votre nouveau compte » dans l’e-mail de Discourse.

Existe-t-il un moyen de faire en sorte que Discourse vérifie qui est réellement vérifié en fonction des métadonnées reçues depuis WooCommerce ?

Je suppose que ce « Module de vérification par e-mail » ne touche pas wp_new_user_notification, sinon Discourse le verrait, n’est-ce pas ? Peut-on demander à Discourse de rechercher un autre hook ?

J’attends avec impatience vos éclaircissements à ce sujet !

@simon Je viens de remarquer ton commentaire ici :

Est-ce que l’utilisation de cet extrait de code :up_arrow:︎ serait la solution à ce que j’essaie d’accomplir ?

Tant que le plugin Booster for WC empêche les utilisateurs de se connecter à WordPress avant d’avoir vérifié leur adresse e-mail, ce code peut être utilisé en toute sécurité. Une fois ajouté à votre thème ou à un plugin, il permettra aux utilisateurs de se connecter à votre site Discourse sans avoir à re-vérifier leur adresse e-mail.

Cela serait également possible. Si vous connaissez le nom de la clé de métadonnée définie par WooCommerce et la valeur de retour attendue pour les utilisateurs ayant une adresse e-mail vérifiée, vous pouvez ajouter une vérification correspondante à la fonction. Voici un exemple :

add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
    if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
        $require_activation = false;
    }

    return $require_activation;
}

Si vous rencontrez des problèmes de redirection de connexion SSO avec WooCommerce, vous devrez peut-être installer ce plugin sur votre site : GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. Consultez le fichier readme du plugin pour plus de détails sur ses fonctionnalités.

Ce code a fait l’affaire ! Les utilisateurs n’ont plus qu’à cliquer sur le lien de vérification généré par WP. :folded_hands: Merci !

Je viens de l’ajouter, mais lorsque l’utilisateur clique sur le lien de vérification généré par WP, il est simplement redirigé vers sa page /my-account dans WP après la vérification. Il ne revient pas vers les forums Discourse. Quel est le comportement attendu ici ?

Je pense que le lien de vérification est généré par le plugin Booster for WC. Si c’est le cas, ce n’est pas quelque chose que j’ai testé. Le problème que le plugin wp-discourse-woocommerce-support vise à résoudre consiste à remplacer une redirection de connexion définie par Woocommerce à chaque tentative de connexion. Je n’ai pas testé récemment avec Woocommerce, mais par le passé, lorsque Woocommerce était installé sur un site, il empêchait les utilisateurs non connectés d’être redirigés vers Discourse lorsqu’ils tentaient de se connecter via WordPress.

Le comportement attendu est le suivant : lorsqu’un utilisateur qui n’est pas connecté à WordPress clique soit sur le bouton de connexion sur Discourse, soit sur un lien de connexion SSO généré sous un article publié sur Discourse, l’utilisateur est conduit à travers le processus de connexion WordPress, puis redirigé vers l’URL Discourse correcte. Faites-moi savoir si cela ne fonctionne pas correctement pour les utilisateurs qui ont vérifié leur adresse e-mail.

Il est peut-être possible de faire fonctionner cela avec le lien de vérification sur lequel vos utilisateurs cliquent, mais je pense que c’est un problème distinct.