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.
[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.
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.
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.
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?
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.
Sì @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.
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ì.
È 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.
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.