Siti Discourse multipli su singola WordPress con wp-discourse

Ho un cliente che ha un sito WordPress che gestisce abbonamenti e un forum collegato con wp-discourse. Tutto bene.

Ma ora vuole aggiungere siti Discourse aggiuntivi che si autenticano tutti contro l’unico sito WordPress. Ho provato a copiare la configurazione dal primo sito Discourse al secondo, ma WordPress reindirizza al primo sito Discourse. Ho quindi pensato che forse potrei rendere il primo sito Discourse un server discourse_connect per il secondo sito, ma anche questo non funziona (anche questo reindirizza al primo sito Discourse e il secondo non viene autenticato).

C’è un modo per avere un unico sito WordPress che fornisca l’autenticazione per più siti Discourse?

2 Mi Piace

Se hai intenzione di utilizzare l’accesso singolo per più di due piattaforme, la soluzione più corretta è utilizzare keycloak.
Questo approccio è valido perché non dobbiamo pensare a un server di accesso singolo e a un accesso più semplice tramite social network (e non solo).
Puoi aggiungere e rimuovere qualsiasi sito senza perdere l’utente.

Il plugin WP Discourse non è configurato per gestire questo, ma dovrebbe essere possibile.

Inizierei aggiungendo un parametro URL site all’impostazione discourse_connect_url di Discourse. Su WordPress, usa il parametro site per impostare il corretto sito Discourse a cui reindirizzare qui:

Probabilmente dovresti anche occuparti della chiamata a sync_sso che avviene qui: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

Non ne sono sicuro, ma potresti dover aggiungere site alle query vars consentite in questa funzione (in modo che WordPress non rimuova il parametro): wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

Idealmente, le modifiche di cui sopra potrebbero essere realizzate con hook action e filter su WordPress. Sembra che gli hook dovrebbero essere aggiunti al codice per questo.

Presumo che la specifica per questo non comporti la pubblicazione di post da WordPress a più siti Discourse. Se è così, le modifiche necessarie sarebbero un po’ più complesse.

Ti farò sapere se mi vengono in mente altri problemi.

Modifica: devo pensare a come viene utilizzato l’ID utente di Discourse su WordPress per assicurarmi che non ci siano conflitti tra più siti - un singolo utente su WordPress potrebbe potenzialmente avere account su più siti WordPress. Avrebbero un ID utente Discourse diverso su ciascun sito.

Modifica: il problema più grande che vedo è se l’impostazione “Crea o sincronizza utenti Discourse al login” è abilitata sui siti WordPress. Effettua una chiamata API al percorso sync_sso di Discourse. Dovresti avere un modo per sapere su quale sito Discourse sincronizzare o creare l’utente. Dovresti anche avere una chiave API di Discourse per ciascun sito. Sembra fattibile, ma aggiungerebbe una certa complessità.

3 Mi Piace

Sembra una cosa possibile. Sì, non gli interessa pubblicare, solo l’autenticazione e, immagino, l’invio di gruppi da WooCommerce o simili.

Presumo che ciò significhi modificare le appartenenze ai gruppi di un utente su un particolare sito Discourse quando effettua un acquisto sul sito WordPress. Sembra fattibile, ma sarebbe meglio farlo con una richiesta API al percorso sync_sso. Il plugin WP Discourse ha funzioni che possono essere utilizzate per questo, ma utilizzano l’URL e la chiave API di Discourse impostati nelle pagine delle opzioni del plugin: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. Forse il plugin potrebbe aggiungere hook di filtro a quei parametri in modo che possano essere impostati condizionalmente.

3 Mi Piace

Stiamo esplorando una configurazione simile, quindi sarei interessato anch’io a una soluzione.

1 Mi Piace

Penso che non abbia risposto quando gli ho chiesto se volesse giocare per lo sviluppo (sospetto perché è impegnato con altre cose).

Se hai un budget, potrebbe aiutare.

È ancora in fase esplorativa, quindi non ho un budget vero e proprio. Ma posso fornire un po’ di assistenza agli sviluppatori e forse un piccolo finanziamento. Se anche il tuo cliente è disposto a contribuire, allora forse possiamo mettere insieme qualche finanziamento.

1 Mi Piace