Fai riconoscere a Discourse gli account verificati in WordPress (e WooCommerce) per l'SSO

Continuiamo la discussione da Come disattivare la verifica email di Discourse?:

Discourse non riconosce i nostri account verificati. Ecco alcuni dettagli sulla configurazione attuale del nostro sito:

Sto utilizzando il plugin WP Discourse con WordPress come provider SSO

Impostazioni SSO attuali <img>

Attualmente sto utilizzando WooCommerce (WC) per gestire le registrazioni dei nuovi utenti, qui: https://pickleballist.com/my-account

Sto utilizzando un plugin chiamato Booster for WC, che aggiunge funzionalità aggiuntive a WC, inclusa la possibilità di richiedere la verifica dell’email prima che un utente possa accedere al proprio account.

Opzioni del plugin <img>

Email di verifica ricevuta <img>

Dopo che l’utente clicca sul link nell’email di attivazione dell’account, viene reindirizzato alla pagina /my-account/ di WordPress. Se una persona tenta di accedere con le credenziali di registrazione senza aver cliccato sul link di verifica, le viene comunicato che il suo account deve prima essere verificato e le viene fornito un link per “reinvia email di verifica”.

Se visitate la pagina “Utenti” nella console di amministrazione, potete facilmente vedere quali account sono stati verificati e quali no.

Account utente con rappresentazione della verifica <img>

Purtroppo, dopo che l’utente ha verificato la propria email e tenta di visitare i nostri forum su https://forums.pickleballist.com, non viene automaticamente eseguito l’accesso. :disappointed_face: Ma la parte peggiore è che quando cliccano sul pulsante “Accedi” nei forum, vengono richiesti di controllare la propria email e cliccare sul link “Conferma il tuo nuovo account” nell’email di Discourse.

Esiste un modo per far sì che Discourse verifichi chi è effettivamente verificato in base ai metadati ricevuti da WooCommerce?

Immagino che questo “Modulo di verifica email” non stia interagendo con wp_new_user_notification, altrimenti Discourse lo avrebbe rilevato, giusto? Possiamo far sì che Discourse cerchi un altro hook?

Non vediamo l’ora di ricevere qualsiasi chiarimento in merito!

@simon Ho appena notato il tuo commento qui:

Utilizzare quel frammento di codice :up_arrow:︎ sarebbe la soluzione a ciò che sto cercando di realizzare?

Finché il plugin Booster for WC impedisce agli utenti di accedere a WordPress prima di aver verificato il proprio indirizzo email, quel codice sarà sicuro da utilizzare. Aggiunto al tuo tema o a un plugin, permetterà agli utenti di accedere al tuo sito Discourse senza dover rieseguire la verifica dell’email.

Anche questo è possibile. Se conosci il nome della chiave dei metadati impostata da WooCommerce e il valore di ritorno atteso per gli utenti con email verificata, puoi aggiungere un controllo a tale funzione. Qualcosa del genere:

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;
}

Se riscontri problemi di reindirizzamento durante l’accesso SSO con WooCommerce, potrebbe essere necessario installare questo plugin sul tuo sito: GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. Consulta il file readme del plugin per i dettagli sulle sue funzionalità.

Quel codice ha funzionato! Ora gli utenti devono solo fare clic sul link di verifica generato da WP. :folded_hands: Grazie!

Ho appena aggiunto questo plugin, ma quando l’utente fa clic sul link di verifica generato da WP, viene semplicemente reindirizzato alla pagina /my-account di WP dopo la verifica. Non lo riporta ai forum di Discourse. Qual è il comportamento previsto in questo caso?

Penso che il link di verifica venga generato dal plugin Booster for WC. Se è così, non si tratta di qualcosa che ho testato. Il problema che il plugin wp-discourse-woocommerce-support intende risolvere è sovrascrivere un reindirizzamento di login impostato da WooCommerce ad ogni tentativo di accesso. Non ho testato il plugin con WooCommerce di recente, ma in passato, quando WooCommerce era installato su un sito, impediva agli utenti non autenticati di essere reindirizzati a Discourse quando tentavano di accedere tramite WordPress.

Il comportamento previsto è che quando un utente non autenticato su WordPress clicca sul pulsante di accesso su Discourse o su un link di login SSO generato sotto un post pubblicato su Discourse, l’utente venga portato attraverso il processo di login di WordPress e poi reindirizzato all’URL corretto di Discourse. Fammi sapere se questo non funziona correttamente per gli utenti che hanno verificato il loro indirizzo email.

Potrebbe essere possibile far funzionare anche il link di verifica su cui i tuoi utenti fanno clic, ma penso che si tratti di un problema separato.