Sincronizzazione bidirezionale tra nome utente WP Discourse e nome utente Discourse?

Recentemente, il mio team e io abbiamo lavorato a una funzionalità che consente di modificare il nome utente di Discourse di un utente da WordPress con il plugin WP Discourse installato e il nostro sito WordPress impostato come provider SSO per Discourse. Attualmente abbiamo avuto un certo successo utilizzando l’API di Discourse, dove abbiamo un campo meta personalizzato in WordPress che, quando aggiornato, chiama l’istanza Discourse del nostro sito con una richiesta PUT per aggiornare il nome utente dell’utente (simile a una soluzione proposta qui: How does one change a username via the API?)

Tuttavia, esiste un’opzione esistente all’interno di WP Discourse come mostrato qui:

che consente agli utenti di WordPress di modificare il loro “nome utente Discourse” tramite questo campo nella loro pagina del profilo WordPress:

ma questo campo viene utilizzato solo per la pubblicazione di post (da WP a Discourse) e non aggiorna effettivamente il nome utente dell’utente in Discourse. Si sincronizza quando un utente cambia il proprio nome utente in Discourse, ma non si sincronizza da WordPress a Discourse quando viene modificato.

La mia domanda è: questo tipo di sincronizzazione bidirezionale verrà implementato a un certo punto? Perché esiste un’opzione per consentire agli utenti di modificare questo campo del nome utente se non si sincronizza da WordPress a Discourse? Il mio team sarebbe anche interessato a contribuire con questa funzionalità se non è qualcosa già in lavorazione. Il nostro sito necessita di questa funzionalità e immaginiamo che sarebbe utile anche per tutti i siti WP Discourse. Per favore, fatemi sapere a riguardo!

@angus @simon dato che siete entrambi molto coinvolti in WP Discourse e ci avete aiutato con i nostri problemi SSO, penso che dovrei rivolgere questa domanda a voi!

3 Mi Piace

Ho spostato questo nella categoria Support > WordPress, poiché la categoria Feature è destinata alle funzionalità di Discourse.

Il campo “Discourse Username Editable” nel plugin WordPress potrebbe essere chiamato in modo improprio. La copia dell’impostazione deve assolutamente essere aggiornata per chiarire a cosa serve. Quando l’impostazione “Discourse Username Editable” è abilitata, gli utenti del sito WordPress possono impostare il proprio nome utente Discourse nella pagina del loro profilo WordPress. Se tale impostazione non è abilitata, solo un amministratore del sito WordPress può impostare il nome utente Discourse dell’utente. Il nome utente Discourse viene utilizzato dal plugin solo per la pubblicazione di post da WordPress a Discourse.

Quando DiscourseConnect viene utilizzato tra WordPress e Discourse, il nome utente Discourse dell’utente viene inizialmente impostato dal nome utente WordPress. Se l’impostazione auth_overrides_username è abilitata sul sito Discourse, il nome utente su Discourse può essere impostato solo da WordPress. Se l’impostazione auth overrides username non è abilitata su Discourse, gli utenti potrebbero modificare il proprio nome utente su Discourse, quindi i nomi utente potrebbero essere non sincronizzati tra i due sistemi.

Per quanto riguarda il campo “Discourse Username”, idealmente, questo campo verrebbe sempre impostato in background in base al nome utente Discourse. È passato un po’ di tempo dall’ultima volta che ho esaminato il codice correlato, ma credo che il campo “Discourse Username” venga riempito automaticamente se il sito WordPress viene utilizzato come provider SSO per Discourse e l’opzione “Crea o Sincronizza Utenti Discourse al Login” è abilitata nella scheda delle opzioni del Provider DiscourseConnect su WordPress. Il campo “Discourse Username” viene anche impostato automaticamente se Discourse viene utilizzato come provider SSO per WordPress (con l’impostazione DiscourseConnect Client).

Idealmente, il campo “Discourse Username” verrebbe sempre impostato automaticamente quando WordPress è il provider SSO per Discourse, indipendentemente dal fatto che l’opzione “Crea o Sincronizza Utenti Discourse al Login” sia abilitata o meno su Discourse. Non credo si possa fare nulla per il caso in cui DiscourseConnect non venga utilizzato tra i due siti, ma @angus potrebbe avere idee al riguardo.

Per impostazione predefinita, WordPress non consente agli utenti di modificare i propri nomi utente, quindi non abbiamo ricevuto molte domande al riguardo. Se si desidera garantire che i nomi utente siano mantenuti sincronizzati tra WordPress e Discourse, assicurarsi di abilitare l’impostazione auth_overrides_username su Discourse. Potrebbe anche essere utile abilitare l’opzione “Crea o Sincronizza Utenti Discourse al Login” su WordPress. Con tale opzione abilitata, gli utenti verranno aggiornati su Discourse ogni volta che accedono al proprio sito WordPress. Se tale opzione non è abilitata, gli utenti verranno aggiornati su Discourse solo quando effettuano il logout da Discourse, quindi accedono nuovamente con DiscourseConnect.

3 Mi Piace

Grazie per la risposta @simon e per la spiegazione della funzionalità esistente.

Il nostro sito potrebbe essere un caso un po’ speciale, perché non vogliamo sincronizzare il nome utente di WordPress con Discourse proprio perché WordPress non consente agli utenti di modificare i propri nomi utente per impostazione predefinita. E non vogliamo installare un plugin che aggiunga questa funzionalità di modifica del nome utente di WP a causa dell’instabilità che potrebbe creare.

Ma poiché i nomi utente sono modificabili in Discourse, penso che avrebbe senso estendere questa funzionalità in WordPress tramite il plugin WP Discourse. Questo campo sembra il posto perfetto per farlo, ma capisco che potrebbe entrare in conflitto con il nome utente di WP poiché quest’ultimo non cambierebbe mai per impostazione predefinita. Quindi, deduco che non sia qualcosa che desideri che contribuiamo al plugin?

1 Mi Piace

Inoltre, consentire agli utenti di modificare il proprio nome utente nel forum è un requisito fondamentale per noi. Abbiamo già impostato Discourse per consentirlo, ma la maggior parte dei nostri utenti non cambia il proprio nome utente Discourse perché è nascosto nelle impostazioni di Discourse. Vogliamo che sia ben visibile nella loro pagina del profilo sul nostro sito WordPress, insieme alle altre informazioni come nome, avatar, ecc.

1 Mi Piace

Alcune domande e alcune note

Tuttavia, saranno uguali nelle nuove registrazioni, poiché si utilizza DiscourseConnect. Presumo che tu sia d’accordo e che ti preoccupi solo della sincronizzazione in sé (cioè, dopo la creazione dell’account)?

Come prevedi il caso in cui un utente crea un account Wordpress e non ha ancora effettuato l’accesso a Discourse? Non esisterà alcun account Discourse. In tal caso, il campo Nome utente Discourse non sarebbe modificabile?

Si noti che il webhook “Aggiorna dati utente” (vedere “Webhook” nelle impostazioni di WP Discourse) aggiornerà il nome utente Discourse in Wordpress quando viene modificato in Discourse. Questa è una parte della sincronizzazione bidirezionale che stai prevedendo.

Quindi, nello specifico, quello che ti serve è solo che il plugin WP Discourse aggiorni il nome utente dell’utente in Discourse quando cambia, giusto?

Ora, quel campo viene utilizzato da persone diverse per scopi diversi. Alcune persone vogliono poter modificare quel campo senza aggiornare il nome utente dell’utente Discourse associato all’account che utilizzano con DiscourseConnect.

Tuttavia, esiste una soluzione relativamente semplice. Potremmo semplicemente aggiungere un action da qualche parte intorno a qui in modo che tu possa utilizzare una richiesta PUT a Discourse per aggiornare il nome utente su Discourse, cioè come stai facendo ora. Aggiungerei solo che il modo più semplice per farlo è utilizzare il metodo astratto discourse_request nelle Utilità del plugin WP, cioè

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;
$path = ''
$args =  array(
);
$response = DiscourseUtilities::discourse_request( $path, $args );

Utilizzando sia il Webhook che la callback di azione, avresti una sincronizzazione bidirezionale nel modo in cui la stai prevedendo, supponendo che tu abbia tenuto conto delle due domande che ho sollevato sopra.

Sono felice di rivedere e unire una PR con un’azione aggiuntiva in quella direzione.

4 Mi Piace

In realtà stiamo sovrascrivendo questo comportamento con l’hook del filtro wpdc_sso_params perché il nostro sistema SSO integra Firebase e il nome utente WP di tutti predefinito è il loro UID di Firebase, quindi stiamo cambiando il predefinito di Discourse in memberXXX (con XXX che è un numero). In realtà vogliamo cambiare questo predefinito in Nome_Cognome dell’utente a un certo punto. Ma sì, la nostra preoccupazione principale è che gli utenti possano cambiare facilmente il proprio nome utente dalla loro pagina del profilo sul nostro sito Wordpress.

In questo caso, penso che possiamo memorizzare il campo del nome utente e farlo sincronizzare quando l’account viene creato (tramite l’hook del filtro wpdc_sso_params al primo SSO), oppure potremmo forzare la creazione di un account Discourse per ogni membro quando si registra sul nostro sito Wordpress tramite l’API di Discourse. La seconda opzione sarebbe probabilmente più vantaggiosa perché sapremmo che tutti hanno un account Discourse e ci sarebbero quindi meno casi speciali di alcuni utenti che hanno account e altri no. Ma stiamo davvero puntando a un’esperienza senza interruzioni, quindi vogliamo che questo nome utente sia quello che l’utente pensa come suo nome utente per l’intera nostra piattaforma. Vogliamo che sia sempre modificabile e, in futuro, probabilmente lo utilizzeremo per più scopi oltre a Discourse (ad esempio, nelle classifiche, ecc.).

Sì, è esattamente ciò di cui abbiamo bisogno!

Capito! Grazie per questa indicazione, il mio team ed io lavoreremo per testare questo con la nostra implementazione prima e presto faremo una PR!

2 Mi Piace