Tuttavia, dopo aver fatto clic sul pulsante Autorizza, l’utente viene reindirizzato e incontra questo messaggio sul nostro forum:
e l’errore in cima a questo argomento viene visualizzato nei log dell’amministratore.
Sento di aver letto e provato tutto per risolvere questo problema, ma continua a succedere. Mi sono assicurato che le impostazioni del sito Client ID e Secret di Discord fossero corrette.
Ho anche verificato che l’URI avesse la sintassi corretta (basandomi su alcuni argomenti correlati che ho visto):
Penso (?) di aver ristretto il campo a un problema di nginx e/o di caching? Ci dovrebbero essere elementi specifici per l’autenticazione o specifici per CSRF definiti in discourse.conf che potremmo star perdendo?
@merefield, @david, @sam - scusate per le notifiche ma vedo i vostri nomi in molte delle vecchie discussioni relative al csrf in passato. Avete qualche raccomandazione in merito? Con l’autenticazione Discord che è parte integrante di discourse, non so cosa potrebbe causare questo.
Non riesco ancora a trovare uno schema. A volte funziona e mi connette correttamente, ma altre volte mi viene presentata la pagina csrf.
Al momento, sospetto maggiormente dell’ultimo controllo della condizione in verified_request?.
Ci sono modi per verificare facilmente se (valid_request_origin? && any_authenticity_token_valid?) restituisce true?
Mi scuso per la mancanza di informazioni debuggabili, ma penso di essere riuscito a trovare (dolorosamente) quello che credo sia il problema. Non sono ancora sicuro di quale sia la soluzione, quindi continuate a leggere
Le immagini qui sotto mostrano un’istanza consecutiva in cui sono riuscito a collegare con successo il mio account, ho aggiornato/provato di nuovo e ho colpito senza successo la pagina “csrf detected”. Ero in una finestra di navigazione in incognito e non ho fatto/cambiato letteralmente nulla tra il collegamento riuscito e il fallimento del csrf. Ecco cosa ho scoperto:
Quindi questa prima immagine mostra il cookie _forum_session che corrisponde nelle intestazioni delle richieste 1 e 2, il che ha portato a un collegamento riuscito.
Tuttavia, dopo aver ricaricato la pagina e riprovato (e non essere riuscito a connettermi), potete vedere che la mia ricerca sul lato sinistro mostra solo 1 occorrenza del cookie _forum_session in un’intestazione di richiesta quando è risultata in un fallimento.
tl;dr: Sono abbastanza sicuro che il problema derivi dal cookie forum_session nell’intestazione della richiesta discord?reconnect e poi dall’intestazione della richiesta di callback? successiva che non corrisponde. Cosa potrebbe causare la loro differenza?
Quindi in questa immagine qui sotto, puoi vedere una richiesta POST di aggiornamento che avviene direttamente dopo la richiesta POST discord?reconnect.
Se controllo un’istanza di connessione riuscita (sotto), puoi vedere che l’aggiornamento si verifica solo prima della richiesta POST discord?reconnect.
@FerrariFlunker scusa per la lenta risposta, ma non ho avuto modo di esaminare questo problema, sarebbe fantastico se il team principale potesse farlo.
Se può consolare, credo di poter riprodurre lo stesso errore:
Stai riscontrando questo errore nel tuo ambiente? Penso che in ogni caso, questo errore debba essere esaminato dal team principale. Sono più di 2 settimane che sto cercando di risolvere questo problema e non ho ancora trovato una risposta
Ottimo lavoro di indagine! Questo tipo di race condition potrebbe certamente causare i problemi che stai riscontrando.
Detto questo, non abbiamo ricevuto altre segnalazioni di questo problema, quindi sembra che debba essere qualcosa di specifico del tuo sito/configurazione. Quali plugin hai installato sul sito? Puoi aprire la chiamata “update” e vedere quale payload viene inviato?
Dopo aver esaminato le chiamate di aggiornamento, penso che tu abbia ragione. Ecco alcuni screenshot di richieste di “aggiornamento” confermate che hanno causato errori csrf.
Vedo uno schema che coinvolge cdn Cosa potrebbe essere mal configurato con quello? Fammi sapere se hai ancora bisogno di un elenco dei nostri plugin, ho solo pensato di salvare questa risposta da +1 immagine
a uno dei nostri plugin!
Dopo aver disabilitato il plugin, ulteriori test e un lancio riuscito della funzionalità correlata alla community… penso di poter dire con sicurezza che abbiamo trovato il colpevole.
Ripensandoci, ha senso perché questo sarebbe il colpevole: il plugin è ancora contrassegnato come sperimentale e non è destinato a siti di produzione.
Dato che sono più di 3 settimane che sto diagnosticando questo problema e devo tornare in carreggiata con gli altri progetti della nostra community , sfortunatamente non sarò in grado di aiutare a trovare la soluzione per il plugin discourse-chat.
Se qualcuno dovesse implementare una correzione per il plugin, prenderemmo in considerazione (molto probabilmente ) la riattivazione del plugin sul nostro sito, ma per ora abbiamo bisogno di una funzionalità di associazione account Connect stabile.
Grazie ancora a tutti coloro che hanno aiutato nella diagnosi!
Ho appena creato una PR per una correzione nel core di Discourse:
Il motivo per cui è stato corretto dopo aver rimosso il plugin di chat è che la chat fa un uso intensivo di questa API ‘PresenceChannel’, e quindi è molto più probabile che si verifichi il problema. Non credo che saranno necessarie modifiche nella chat.
Dovrebbe risolvere lo stesso problema con i login di Google? I miei utenti su una delle mie istanze in cui stavamo testando il plugin di chat lo adoravano, ma ha interrotto i login di Google con lo stesso errore dei login di Discord.