# Problema com modal de login social (novo usuário) quando /login é aberto programaticamente em um iframe

**URL:** https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967
**Category:** Support
**Created:** [Janeiro 17, 2020, 6:05pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967 "2020-01-17T18:05:25Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [Janeiro 17, 2020, 6:05pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/1 "2020-01-17T18:05:25Z")

</div>

Olá,

### Contexto

Criei um aplicativo que usa a API do Discourse e o SSO como provedor.  
Atualmente, o aplicativo é exibido dentro de um iframe e, para que o login social funcione corretamente, a página `/login` precisa ser aberta fora do iframe, em uma nova aba do navegador.  
Até aqui, tudo bem.

### Problema

Quando um _novo_ usuário se registra usando um botão de login social, ele é redirecionado corretamente para o site social. Porém, ao retornar ao Discourse, é aí que surge o problema: o Discourse exibe o modal de login em vez daquele com o nome de usuário/e-mail já preenchidos.  
Para ver o modal correto e finalizar seu registro, você precisa fechar o modal de login e, em seguida, clicar manualmente no botão de cadastro.

Apenas para novos usuários, o login funciona como esperado.  
Será que estou esquecendo algo ou há algum contexto que o Discourse não está lidando corretamente? Tecnicamente, deveria ser a mesma coisa.

Se quiser ver uma demonstração, por favor, me avise. Posso enviar um vídeo rápido por MP (ele contém informações privadas).

Qualquer ajuda será bem-vinda!

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [Janeiro 17, 2020, 7:29pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/2 "2020-01-17T19:29:29Z")

</div>

Você está na versão mais recente do Discourse?

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [Janeiro 17, 2020, 7:35pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/3 "2020-01-17T19:35:22Z")

</div>

Sim. (desculpe pelos textos em não inglês, estou trabalhando para um cliente que usa hebraico)

 ![image](https://global.discourse-cdn.com/meta/original/3X/1/1/1160103a43cdaf6b28601ff235b74d9567ee0b7f.png)

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [Janeiro 21, 2020, 12:47pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/4 "2020-01-21T12:47:04Z")

</div>

Qualquer ajuda nisso, por favor?

Para ser mais preciso, o aplicativo é usado em uma extensão do Chrome. Estamos usando um iframe porque não temos outra opção no momento. Mas, ainda assim, não tenho certeza de qual é a diferença entre abrir programaticamente uma nova aba no navegador para `/login` ou `/signup` diretamente a partir de um iframe e abrir manualmente uma aba e clicar no botão de login/cadastro.

Isso é algo que pode ser corrigido no Discourse?

Atualmente, estamos usando o Discourse como provedor de SSO. Existem outras maneiras?  
Se sim, qual seria a melhor maneira de realizar login/cadastro nesse contexto?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Janeiro 21, 2020, 1:29pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/5 "2020-01-21T13:29:46Z")

</div>

> [@Arkshine](#):
>
> a página `/login` precisa ser aberta fora do iframe em uma nova aba do navegador

Como você implementou isso? Parece que alguns cookies/sessão estão sendo perdidos em algum lugar.

Em geral, não suportamos o uso do Discourse dentro de um iframe. Como você descobriu, existem peculiaridades estranhas que podem causar problemas.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [Janeiro 21, 2020, 2:12pm UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/6 "2020-01-21T14:12:29Z")

</div>

Não estou incorporando o Discourse em um iframe. Estou usando a API para exibir mensagens de tópicos.

Não estou tentando fazer login/cadastro _dentro_ de um iframe, pois sites sociais não permitem ser exibidos dentro deles. Por isso, quando o usuário clica em um botão dentro do iframe, abre-se uma nova aba do navegador para a página /login do Discourse.

Tecnicamente, quando o usuário clica no botão de login, uma nova aba é aberta com `/session/sso_provider`. O `return_sso_url` conterá uma URL para o backend processar os dados, salvar as informações da sessão do usuário e, em seguida, responder com algum HTML para fechar automaticamente a janela. O aplicativo então detectará que a ação foi concluída e será recarregado automaticamente para poder usar a sessão salva do usuário.

Mesmo que o aplicativo não estivesse em um iframe, provavelmente ocorreria o mesmo. Como se trata de uma extensão de navegador, você não tem escolha a não ser abrir uma nova aba de qualquer forma. Estou me perguntando se existem maneiras melhores de fazer login/cadastro nesse caso.

EDIT: Aqui está uma demonstração (não era para ser pública, mas bem, essa é a maneira mais curta de mostrar o problema e sinto que não expliquei bem o suficiente):  
_snip, vídeo removido, ninguém se importa mesmo_  
EDIT2: Parece acontecer apenas ao usar a API `/session/sso_provider`; se eu abrir a URL do Discourse diretamente (ainda a partir de um iframe), parece que o problema não ocorre.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [Dezembro 6, 2023, 8:06am UTC](https://meta.discourse.org/t/issue-with-social-login-modal-new-user-when-login-is-opened-programmatically-in-an-iframe/138967/7 "2023-12-06T08:06:38Z")

</div>


