Impossibile creare utente in Discourse da WP con nuovo modulo di registrazione

Ho Discourse Connect configurato con WP come istanza principale di registrazione e accesso.

Ho due moduli di registrazione utente con flussi diversi

  1. Registrazione standard dalla Homepage (questo è il vecchio e crea ancora un utente in Discourse)
  2. Registrazione utente utilizzando un flusso di strumenti. (questo crea l’utente WP ma non crea un utente in Discourse).

Non vedo impostazioni nel plugin Discourse specifiche per un modulo di registrazione. Quando vado sull’utente, non vedo un nome utente Discourse in WP per il secondo modulo. Link

Ho due domande:

  1. Cosa potrei star perdendo qui? È necessaria un’ulteriore configurazione per farlo funzionare per un nuovo modulo?
  2. Come posso creare un utente in Discourse e collegarlo a WordPress per i membri che esistono in WP?

Correzione: Dopo ulteriori analisi, sembra che alcuni utenti non vengano creati in Discourse nemmeno dal primo modulo.

1 Mi Piace

Qualcuno ha riscontrato questo problema? Sono davvero bloccato qui.

Ciao @Himanshu_Singh,

Potresti guidarmi, passo dopo passo, in termini di come lo vede un utente:

  1. Cosa succede con il tuo modulo di “registrazione standard”;
  2. Cosa succede con il tuo modulo di “registrazione utente”.

ad esempio

  1. Un utente va al modulo e inserisce i propri dati
  2. Un utente viene reindirizzato a discourse..

Includi i passaggi in cui accade qualcosa che non vuoi che accada e i passaggi che vorresti accadessero invece.

2 Mi Piace

Ciao Angus,

Nella registrazione standard,

  1. L’utente accede al modulo e aggiunge nome, email e password
  2. Quindi l’utente accede automaticamente
  3. Poi, quando l’utente fa clic sul link della community, accede automaticamente a Discourse (poiché nel frattempo il plugin Discourse Connect ha svolto il suo lavoro per creare un nuovo utente in Discourse)

Per il secondo modulo,

  1. L’utente aggiunge un nome e un’email.
  2. Gli forniamo una password temporanea
  3. Il resto del processo è lo stesso, ovvero l’utente accede automaticamente al momento dell’iscrizione
  4. Ma in questo caso, l’utente non viene creato in Discourse.

Non vedo alcuna impostazione in Discourse Connect che venga attivata modificando un modulo per la registrazione. Esiste un hook che deve essere attivato alla registrazione dell’utente in WP che non viene attivato nel caso del secondo modulo?

Infatti, quale hook in WordPress viene utilizzato per creare un utente in Discourse? Deve esserci una chiamata API per attivare l’attività in Discourse. Potrebbe non essere stata attivata per qualche motivo?

1 Mi Piace

Cosa succede a questi utenti quando fanno clic su “Accedi” in Discourse? Descrivi esattamente cosa succede quando ci provano. Capisco che l’utente non venga visualizzato nel tuo pannello di amministrazione dopo essere stato creato in WordPress, ma questa è una domanda leggermente diversa.

1 Mi Piace

Primo caso in cui l’utente è registrato in WP -
L’utente non deve fare clic su login in Discourse e viene automaticamente collegato
facendo clic sul seguente link in WP -

https://community.showprowess.com/session/sso?return_path=/

Se uso solo il link - https://community.showprowess.com/ per andare a Discourse da WP, l’utente non è collegato e devo fare clic sul pulsante Login su Discourse per collegare l’utente.

Una volta che l’utente è collegato, rimane collegato finché non mi disconnetto da WP.

Questo crea un problema perché se l’utente non fa clic su /session/sso?return_path=/ , l’utente non è collegato. Questo mi impedisce di indirizzare l’utente a una pagina di messaggi privati da WP a Discourse. (una funzionalità di cui ho bisogno come parte del prodotto)

Ad esempio, voglio inviare un messaggio privato all’utente X,
aggiungo questo link al loro post personalizzato su WP -
https://community.showprowess.com/new-message?username=x&title=Message%20from%20

Poiché questo è il primo link su cui faccio clic, la finestra del messaggio non si apre. Invece, vengo collegato a Discourse. Ora devo tornare indietro e fare di nuovo clic sullo stesso link (link del messaggio) per farlo funzionare.

Sembra così -

Questo è fastidioso per gli utenti.

In precedenza, tutto questo funzionava bene poiché l’utente veniva automaticamente collegato a Discourse e l’URL https://community.showprowess.com mi portava a una pagina Discourse collegata. Forse l’utente è stato collegato utilizzando i cookie del browser o qualcosa di simile, ma ora non funziona più.

Quando l’utente non è registrato su Discourse
Questo sta accadendo su entrambi i moduli, ovvero quelli nuovi e quelli vecchi.
In questo caso, mi sono ricollegato e ho seguito il processo di onboarding e questa volta l’utente è stato creato in Discourse. Prima di ciò, l’utente non esisteva in Discourse (ho controllato l’elenco dei nuovi utenti nell’area Admin prima di ricollegarmi).
Ho seguito gli stessi passaggi di cui sopra - fare clic sull’URL /sessions per collegarsi automaticamente a Discourse. Se faccio clic solo sul dominio community, non mi collega.

Sfortunatamente, non sono in grado di riprodurre il caso in cui l’utente non viene creato alla registrazione ma viene creato al primo accesso. Questo non accade a ogni singola nuova registrazione utente, il che è molto strano.

Spero che questo aiuti.

1 Mi Piace

Ad essere sincero, sono un po’ confuso su come questa descrizione del tuo problema si colleghi alla tua precedente descrizione di un problema causato dall’avere due diversi moduli di registrazione di Wordpress. Ma penso comunque di poterti aiutare qui.

Una cosa da capire è che non c’è modo (e non c’è mai stato modo) di essere istantaneamente loggati a due diversi servizi su due diversi domini. Ogni volta che sembra che tu sia loggato al servizio A sul dominio A e quando vai al servizio B sul dominio B sei anche loggato, ciò che è effettivamente successo è che sei stato loggato al servizio B tramite il servizio A solo una volta che visiti il dominio B e viene avviato un processo di login, non prima.

Un’altra cosa da capire è che, al di fuori dello scenario specifico che stai descrivendo in cui vuoi reindirizzare una persona in un punto specifico dell’app che richiede una sessione, alla maggior parte degli utenti non importa, o non nota, il fatto che a volte debbano fare clic su “login” sul servizio B. Nella mia esperienza lavorando con clienti su soluzioni di identità, gli amministratori del sito sono tipicamente molto più sensibili a questo rispetto ai loro utenti.

Il modo in cui funziona non è cambiato. Ogni volta che sembra che un utente sia “automaticamente” loggato, ciò che sta effettivamente accadendo è che è stato reindirizzato a Wordpress e poi reindirizzato a Discourse una volta che la sua sessione in Wordpress è stata autenticata. Se è già loggato in Wordpress, sembrerà che sia stato “automaticamente” loggato a Discourse poiché questo reindirizzamento avverrà senza che l’utente debba fare nulla.

Un modo per attivare il login “automatico” e reindirizzarli in un punto specifico di Discourse dopo il login è utilizzare il percorso che hai già condiviso

https://community.showprowess.com/session/sso?return_path=[any path in Discourse]

Se l’utente è già loggato a Wordpress, ma non ancora loggato a Discourse quando utilizza questo URL, ecco cosa accadrà:

  1. Discourse avvia automaticamente il processo di login di DiscourseConnect
  2. Il browser dell’utente viene reindirizzato a wordpress
  3. L’utente è già loggato, quindi l’utente viene automaticamente reindirizzato a Discourse
  4. Se c’era un valore return_path nell’URL utilizzato in 1, l’utente verrà reindirizzato lì

Dal punto di vista dell’utente, vedrà il suo browser caricarsi brevemente, ma sarà effettivamente “automaticamente” loggato a Discourse e reindirizzato a una parte specifica dell’app.

Nota che puoi effettivamente rendere il return_path qualsiasi URL, anche un dominio separato, se imposti l’impostazione del sito discourse connect allows all return paths su true.

2 Mi Piace

Grazie! Questo è utile per risolvere il problema del login automatico dell’utente da WP a Discourse. Posso usare il return_path per indirizzare l’utente a qualsiasi pagina in Discourse. Questo risolve il problema di indirizzare l’utente alla pagina del messaggio.

Tuttavia, non sono ancora sicuro del perché, in alcuni casi, l’utente non venga creato in Discourse quando l’utente viene creato in WordPress. Sai quando l’utente viene realmente creato in Discourse dall’SSO?

  1. Viene creato quando un utente viene creato in WP?
  2. Viene creato quando un nuovo utente di WordPress tenta di accedere a Discourse e quindi l’utente viene creato, effettuato l’accesso e indirizzato a Discourse?

Quale hook usiamo in WP per creare un utente in Discourse?

Sto cercando di capire quale caso limite non creerebbe un utente in Discourse quando un utente viene creato in WP.

Caso d’uso pratico:
Do il benvenuto ai nuovi utenti ogni settimana con un messaggio. La scorsa settimana 30 utenti si sono iscritti su WP e 16 sono stati creati in Discourse. Quando voglio taggarli in un messaggio di benvenuto, non posso taggarli tutti, il che mi sembra molto strano.

Grazie per l’aiuto Angus. Lo apprezzo.

1 Mi Piace

Con le impostazioni predefinite gli utenti vengono creati in Discourse la prima volta che l’utente accede a Discourse utilizzando DiscourseConnect. Fino a quel momento nessun utente esiste in Discourse.

Il plugin WP Discourse ha anche un’impostazione “Crea o Sincronizza Utenti Discourse all’Accesso” che, quando abilitata, creerà un utente tramite l’API di Discourse dopo che l’utente si registra in Wordpress. Questa impostazione utilizza l’azione wp wp_login, quindi il tuo processo di registrazione utente deve attivare tale azione affinché questa funzionalità funzioni.

2 Mi Piace

Ora è tutto chiaro. Grazie, Angus.

Ho selezionato l’impostazione “Crea o sincronizza utenti Discourse al login”. L’utente non viene creato in Discourse perché alcuni utenti si registrano su WP ma non visitano la community al primo accesso. Potrebbero tornare indietro, accedere e quindi fare clic sull’URL della community e solo allora l’utente viene creato.

L’attuale accesso automatico dopo la registrazione su WP non utilizza WP_login

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );

function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Modifica secondo necessità
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit();
  }
}

Preferirei creare l’utente in Discourse alla registrazione su WP.
Ho hook personalizzati sul modulo di registrazione utente che possono eseguire l’API. Esiste un codice che posso aggiungere all’hook personalizzato per creare un utente in Discourse tramite l’API?

Questa è la parte che non so come fare, cioè attivare wp_login da un hook personalizzato.

2 Mi Piace

Aggiungi semplicemente un trigger di azione al tuo codice.

do_action( 'wp_login' );
2 Mi Piace

Ho fatto esattamente quello che mi hai detto di fare.

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Modifica secondo necessità
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
   do_action( 'wp_login' );

//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit(); 
  }
}

Ma ricevo il seguente errore:
Messaggio: Uncaught ArgumentCountError: Too few arguments to function WPDiscourse\WordPressEmailVerification\WordPressEmailVerification::verify_email_after_login(), 1 passed in /home/customer/www/[domain.com/public_html/wp-includes/class-wp-hook.php on line 307 and exactly 2 expected in /home/customer/www/[domain.com/public_html/wp-content/plugins/wp-discourse/lib/wordpress-email-verification.php:128**

Ho un altro codice che bypassa la verifica via email

add_filter( 'discourse_email_verification', 'disable_discourse_email_verification_prowess');
function disable_discourse_email_verification_prowess() {
  wp_mail( 'himanshu@eshowprowess.com', 'User verified', 'Status must change' ); 
   
    return false;
}

È un problema di sequenza del codice o devo passare qualche parametro all’azione wp_login?

Modifica: L’utente è stato creato in WP ed è stato effettuato l’accesso, ma l’utente non è stato creato in Discourse.

1 Mi Piace

Ti suggerisco di leggere qualcosa sull’azione. La documentazione di WP è una risorsa migliore di me su questo. Purtroppo non sarò in grado di capire come integrare al meglio il tuo codice di accesso WP personalizzato qui. Per quanto riguarda il problema che stai riscontrando, penso che siamo arrivati al fondo della questione.

3 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.