Problema con il modal di accesso sociale (nuovo utente) quando /login viene aperto programmaticamente in un iframe

Ciao,

Contesto

Ho sviluppato un’app che utilizza l’API di Discourse e l’SSO come provider.
Attualmente, l’app viene visualizzata all’interno di un iframe e, affinché l’accesso tramite social funzioni correttamente, la pagina /login deve essere aperta al di fuori dell’iframe in una nuova scheda del browser.
Fin qui, tutto bene.

Problema

Quando un nuovo utente si registra utilizzando un pulsante social, viene reindirizzato correttamente al sito social. Tuttavia, una volta tornato su Discourse, sorge il problema: Discourse mostra la finestra di login invece di quella con username/email già compilati.
Per visualizzare la finestra corretta e completare la registrazione, è necessario chiudere la finestra di login e poi cliccare manualmente sul pulsante di iscrizione.

Solo per gli utenti nuovi, l’accesso funziona come previsto.
Ho perso qualcosa o c’è un contesto che Discourse non gestisce correttamente? Tecnicamente dovrebbe essere la stessa cosa.

Se vuoi vedere una demo, fammelo sapere: posso inviarti via messaggio privato un breve video (mostra informazioni private).

Qualsiasi aiuto è benvenuto!

Sei sull’ultima versione di Discourse?

Sì. (scusa per i testi non in inglese, sto lavorando per un cliente che usa l’ebraico)

Qualsiasi aiuto su questo, per favore?

Per essere più precisi, l’app viene utilizzata in un’estensione di Chrome. Stiamo utilizzando un iframe perché al momento non abbiamo altra scelta. Tuttavia, non sono ancora sicuro di come sia diverso aprire programmaticamente da un iframe una nuova scheda nel browser per /login o /signup direttamente e aprire manualmente una scheda e fare clic sul pulsante di accesso/iscrizione.

È qualcosa che può essere risolto in Discourse?

Attualmente stiamo utilizzando Discourse come provider SSO. Ci sono altri modi?
In tal caso, qual sarebbe il modo migliore per realizzare l’accesso/iscrizione in questo contesto?

Come hai implementato questa soluzione? Sembra che alcuni cookie o la sessione vengano persi da qualche parte.

In generale, non supportiamo l’uso di Discourse all’interno di un iframe. Come hai scoperto, ci sono strane particolarità che possono causare problemi.

Non sto incorporando Discourse in un iframe. Sto utilizzando l’API per mostrare i messaggi di un argomento.

Non sto cercando di accedere o registrarmi all’interno di un iframe, perché i siti di social media non consentono di essere visualizzati al loro interno. Ecco perché, quando l’utente clicca su un pulsante all’interno dell’iframe, si apre una nuova scheda del browser verso la pagina /login di Discourse.

Tecnicamente, quando l’utente preme il pulsante di accesso, viene aperta una nuova scheda con /session/sso_provider. return_sso_url conterrà un URL verso il backend per elaborare i dati, salvare le informazioni sulla sessione dell’utente e quindi rispondere con un po’ di HTML per chiudere automaticamente la finestra. L’app rileverà che l’operazione è conclusa e verrà ricaricata automaticamente in modo da poter utilizzare la sessione salvata dell’utente.

Anche se l’app non fosse in un iframe, probabilmente accadrebbe la stessa cosa. Dato che si tratta di un’estensione del browser, non hai altra scelta che aprire una nuova scheda. Mi chiedo se esistano modi migliori per accedere o registrarsi in questo caso.

EDIT: Ecco una demo (non era intesa per il pubblico, ma beh, è il modo più breve per mostrare il problema e sento di non averlo spiegato abbastanza bene):
tagliato, video rimosso, a nessuno importa comunque
EDIT2: Sembra accadere solo quando si utilizza l’API /session/sso_provider; se apro direttamente l’URL di Discourse (sempre da un iframe), sembra che il problema non si verifichi.