L'ultimo aggiornamento di WP-Discourse sta causando comportamenti imprevisti

L’ultimo commit al plugin WP-Discourse sta causando l’attribuzione di tutti i post personalizzati (creati tramite il plugin EventON) all’utente system nonostante l’utente esista sia su Discourse che su WordPress.

Se torniamo alla versione 2.3.7, funziona come previsto, ma l’aggiornamento alla 2.3.8 causa questo bug.

Riceviamo questo errore via email:

Motivo del fallimento:
 È stato restituito un codice di risposta 400 da Discourse.
 il parametro manca o il valore è vuoto: post
 Forse intendevi? post
        post[raw]
        controller
        title

Pensavo potesse essere utile per identificare la causa probabile.

Ehi, potresti condividere un link al plugin a cui ti riferisci? Stai anche vedendo qualcosa nei log di WP Discourse?

Ciao @angus

Ecco il plugin: https://www.myeventon.com/

Hai bisogno dei log dalla v2.3.7 o dalla v2.3.8 del plugin?

1 Mi Piace

Entrambi, se possibile. Attivare i log di pubblicazione dettagliati.

v2.3.7:

[2022-02-21 08:07:11] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 
[2022-02-21 08:07:11] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 

Il post è stato collegato correttamente al mio account utente sia su WordPress che su Discourse con la versione 2.3.7.

v2.3.8:

[2022-02-21 08:10:15] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 
[2022-02-21 08:10:15] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 

Il post è stato collegato al mio utente su WordPress e all’utente di sistema su Discourse con la versione 2.3.8.

1 Mi Piace

Puoi solo confermarmi alcune cose?

  1. I tuoi tipi di post personalizzati (ad esempio, gli eventi) vengono pubblicati correttamente su Discourse.
  2. Non hai mai visto prima l’errore 400.
  3. Che tipo di utenti (i cui nomi utente di Discourse ti aspetti vengano utilizzati) stanno pubblicando post (ad esempio, sono amministratori o meno)?
  4. Che tipo di chiave API stai utilizzando per connettere WordPress a Discourse?

Sì, i post vengono pubblicati correttamente ma l’utente errato (sistema) viene attribuito con la v2.3.8

No, non abbiamo visto errori 400 in nessuna versione precedente del plugin wp-discourse.

Questi utenti sono utenti registrati non amministratori su WordPress e finora ha funzionato per noi. qualsiasi utente è stato collegato correttamente su Discourse.

È una chiave API globale

1 Mi Piace

Quando questa PR verrà unita (e la versione verrà pubblicata su Wordpress.org), la funzionalità funzionerà come ti aspetti.

2 Mi Piace

Sto riscontrando lo stesso errore e posso confermare che è iniziato dopo l’aggiornamento di WP Discourse alla versione 2.3.8.

Con questa versione, gli argomenti vengono creati, ma con l’utente predefinito.

Per confermare, ho eseguito il rollback di WP Discourse alla versione 2.3.7 e funziona di nuovo.

2 Mi Piace

Grazie, verrà affrontato quando la PR verrà unita. Potresti confermare anche queste due domande

  • Che tipo di utenti (i cui nomi utente di Discourse ti aspetti vengano utilizzati) stanno pubblicando post (cioè sono amministratori o meno)
  • Che tipo di chiave API stai utilizzando per connettere WordPress a Discourse

Stesso problema qui. Non è un tipo di post personalizzato.

non un utente amministratore, ma un moderatore
Una chiave API “tutti gli utenti”.

  • Gli utenti sono moderatori e alcuni amministratori
  • API “Tutti gli utenti”

Ciao ragazzi, la versione 2.3.9 è ora disponibile con una correzione per questo problema. Aggiornate e fatemi sapere come va.

1 Mi Piace

Stiamo riscontrando lo stesso problema con la versione 2.3.9 e stiamo tornando alla 2.3.7, disabilitando l’aggiornamento automatico di questo plugin in futuro.

1 Mi Piace

Ciao @angus

Mi scuso per il disturbo, il mio problema sembra essere stato risolto su WordPress 5.9.1 e WP Discourse 2.3.9

Ma sembra che Discourse stia ora facendo un lavoro extra su ogni post pubblicato e la proprietà venga trasferita dall’utente di sistema all’utente che pubblica dopo i fatti?

1 Mi Piace

Ehi @orenwolf, mi dispiace sapere che stai ancora riscontrando un problema. Potresti confermare che gli utenti che ti aspetti pubblichino a proprio nome abbiano un Discourse Username nel loro profilo Wordpress?


In generale, grazie per la vostra pazienza. Nei miei test su vari siti (e nei test unitari del plugin), la funzionalità Discourse Username ora funziona come previsto su 2.3.9. Se stai ancora riscontrando un problema, conferma di avere l’ultima versione del plugin e che l’utente che ti aspetti sia l’autore del post abbia un Discourse Username.

Potresti chiederti perché questo problema sia sorto. Penso che sarà utile se fornirò un po’ di contesto (che risponderà anche alla tua domanda @itsbhanusharma). In precedenza, il modo in cui funzionava questa funzionalità era utilizzando utenti diversi nell’intestazione Api-Username (vedi qui). Il motivo per cui ciò era considerato necessario era che l’endpoint pertinente in Discourse non supporta l’impostazione di un creatore del post diverso dall’utente che esegue la richiesta API.

Il risultato è stato che l’unico modo in cui questa funzionalità avrebbe funzionato era se avessi una chiave API “Tutti gli utenti” con uno scope “Globale”. Farò notare che per qualche tempo le istruzioni standard per la creazione di una chiave API per il plugin WP Discourse sono le seguenti

Se non hai ancora creato una chiave API, fai clic su “Nuova chiave API”, imposta Livello utente su “Utente singolo”, imposta “Utente” su un account amministratore, seleziona “Chiave globale” e fai clic su “Salva”. Copia e incolla la chiave API qui.

Seguire queste istruzioni avrebbe significato che questa funzionalità (non documentata) non avrebbe funzionato, e ha causato problemi per vari siti.

Inoltre, per varie ragioni di sicurezza, ho apportato progressivamente modifiche al plugin per consentire l’uso di chiavi API molto più specifiche. Ciò richiederà una modifica a Discourse e (quando verrà unita) consentirà agli amministratori del plugin di emettere a se stessi una nuova chiave API molto più limitata. Farò un annuncio al riguardo quando sarà il momento.

@itsbhanusharma, il modo in cui la funzionalità ora funziona è effettuando una seconda richiesta per modificare il proprietario del post dopo che è stato creato (se è presente un Discourse Username). Questo è in realtà attualmente l’unico modo corretto per impostare arbitrariamente il proprietario di un post tramite l’API Discourse (senza dover utilizzare Api-Username e una Global Key per tutti gli utenti nel modo descritto sopra). Considerando il tipo di operazione, questo non dovrebbe essere un problema di prestazioni.

4 Mi Piace

Non è un problema di prestazioni, solo un fastidio spiegare alle persone meno esperte che l’icona della matita in cima al loro post è normale e che sarà così.

Ci vorrà del tempo, ma alla fine ci abitueremo.

È un po’ scoraggiante che i post vengano mostrati come modificati, ma va bene finché tutto funziona.

Tuttavia, è un problema che le notifiche siano sbagliate. Mostrano il nuovo post creato dall’utente di sistema.

Finora questo sembra solo un ripiego, non una soluzione. È certamente un grande passo indietro non poter semplicemente pubblicare automaticamente come utente corretto. Non sono sicuro di capire cosa abbia causato questo malfunzionamento in primo luogo.

La versione breve è che ho lentamente modificato il modo in cui il plugin gestisce tutte le sue richieste a discourse per vari motivi, in particolare test e sicurezza. Il contesto completo e la logica alla base delle modifiche sono troppo lunghi per essere trattati qui. Apprezzo che nel contesto di questa particolare funzionalità possa sembrare “se non è rotto, non aggiustarlo”, tuttavia c’è un contesto più ampio qui.

Queste modifiche sono in corso da tempo (mesi), tuttavia il motivo per cui emergono ora è perché ho commesso un errore nella release 2.3.8. Quindi ho incluso la modifica che avrebbe dovuto essere in quella release in 2.3.9.

Detto questo, @jtbayly @itsbhanusharma ascolto il vostro feedback sul diverso approccio a questa particolare funzionalità. Capisco che possa sembrare una soluzione temporanea. Non lo è. Tuttavia, dato il vostro feedback, reintrodurrò il modo esistente nel plugin dietro un’impostazione che potete utilizzare se lo desiderate (sarà attiva in 2.4.0). Vi aggiornerò con una nota quando sarà unita nei prossimi giorni.

Spero di poter rimuovere completamente questo approccio quando avrò affrontato i problemi che entrambi avete sollevato, molto probabilmente con ulteriori modifiche a discourse/discourse. Come accennato, farò un annuncio più ampio sulle modifiche al modo in cui il plugin gestisce le chiavi API entro il prossimo mese (a seconda di quando le modifiche verranno unite a discourse/discourse), che coprirà aspetti di questo.

4 Mi Piace

Quando ho detto questo, intendevo riconoscere che non ero sicuro se ci fosse un altro modo per andare avanti. Non intendevo un commento del tipo “perché l’hai rotto!”.

Sono molto grato per il tuo lavoro nel mantenere funzionante il plug-in WP con un core Discourse aggiornato. E sono molto felice che ci siano (probabilmente) cambiamenti in arrivo nel core che consentiranno miglioramenti in quest’area.

1 Mi Piace