That was!! You save my day… Thanks a lot!
Could be wrong, but doesn’t this open up a x-site security vulnerability? See:
I don’t know much in these matters, but here is my reasoning:
- “same site cookie” is enabled by default, so it is probably much better this way.
- “same site cookie” can be disabled, so it’s probably not a security hole by itself, rather a weakness that could be exploited in conjunction with others. Disable it at your own risks.
Anyone understands why disabling same site cookie enforcement prevents users from log in within an iframe?
Podemos, por favor, ter suporte oficial para o Discourse em um iframe?
EDIT: Ops, desculpem, não percebi que estava postando dois anos depois.
É muito improvável que isso seja suportado algum dia.
Jeff,
Primeiro: o Discourse é completamente incrível e obrigado por criá-lo!
Segundo: há alguma documentação sobre quais problemas específicos podem ser esperados com um Discourse incorporado via iframe, ou quais limitações o afetariam em princípio?
Obrigado!
Olá, Adam, faz tempo! Deixe-me tentar responder aqui.
Usar um <iframe> é muito propenso a erros e tornaria o Discourse muito difícil de usar, além de cheio de bugs difíceis de rastrear. Também tende a “isolar” o Discourse em uma janela, o que faz com que funcionalidades como rolar por tópicos longos parem de funcionar. Basicamente, os iframes colocam em sandbox muitas das funcionalidades do Discourse.
Uma boa abordagem, caso você estivesse considerando usar um iframe, seria adicionar um cabeçalho ao seu fórum que combine com o restante do seu site/aplicativo/portal, incluindo links de navegação. Quando um usuário clicar para entrar no fórum, verá uma navegação semelhante, mas estará em uma URL diferente hospedada em outro lugar. Ao clicar em um link que não seja do fórum no cabeçalho, ele retornará ao site/aplicativo/portal.
Espero que isso ajude.
Obrigado pela sua resposta!
Você poderia compartilhar quais são os problemas específicos que seriam esperados? Ou os motivos específicos pelos quais o contexto de um iframe causaria problemas sérios?
O que significa “janelar” neste caso?
É isso que faremos para nossa área principal de discussão, mas isso é problemático para este caso de uso específico. Estamos oferecendo cursos online. Cada curso ocorre em uma área privada e especialmente temática do nosso site. O conteúdo do curso inclui materiais de aula, vídeos, cronograma e uma área de discussão. Depois que os alunos concluírem o curso, poderão continuar as discussões que iniciaram com outros participantes da mesma turma. Eles também serão adicionados a um grupo geral de discussão para ex-alunos do curso e serão convidados a participar do nosso fórum de discussão público e maior.
Para o nosso caso de uso, há dois problemas com a abordagem sugerida aqui:
-
O tema (cabeçalho, estilos, barra lateral, etc.) da área do curso no nosso site não é o mesmo que queremos usar para o nosso Discourse em geral. Para acomodá-lo, precisaríamos ser capazes de usar estilos e conteúdo de tema diferentes por categoria, o que não parece ser possível.
-
A discussão do curso em nossa implementação atual (não baseada no Discourse) inclui estilos, cabeçalho e um menu de barra lateral. É um espaço de baixa distração onde os alunos podem se concentrar no conteúdo do curso e alternar suavemente entre discussão, materiais de aula, vídeos, etc. Pelo que pude ver, seria difícil modificar o Discourse para replicar esse tipo de ambiente imersivo. Se não for esse o caso, ficarei feliz em aprender o contrário!
Obrigado pela sua ajuda,
Adam
Isso é possível. O elemento body terá uma classe indicando a categoria atual, o que permite delimitar o tema facilmente usando seletores aninhados no SCSS.
De modo geral, recomendo que você adicione alguns widgets do Discourse à área do curso, como o recurso suportado de lista de tópicos em iframe documentado em Incorporando uma lista de tópicos do Discourse em outro site. Assim, os alunos poderão ver uma lista das discussões mais recentes relacionadas à página do curso atual e, com um único clique, participar delas em outra aba do navegador!
Olá Falco,
Obrigado pela sua resposta e desculpe pela demora em responder.
Infelizmente, nossa implementação de cursos é um pouco mais complexa do que um escopo de CSS personalizado pode acomodar sem grandes acrobacias. Por exemplo, o menu do cabeçalho inclui um menu suspenso com os cursos nos quais o usuário atual está inscrito. Isso é gerado dinamicamente a partir do banco de dados do WordPress, com base no usuário logado, o que tornaria difícil replicar no Discourse.
O menu da barra lateral na área de cursos inclui links para vários tipos de conteúdo do curso, que são específicos de um curso particular. Se entendi corretamente, para que tudo o que você descreveu funcione, todo esse conteúdo, para todos os cursos, precisaria ser codificado diretamente no tema e, em seguida, mostrado ou oculto pelo CSS dependendo da classe do corpo. Está correto?
Uma abordagem que poderia funcionar seria usar algum JavaScript no lado do cliente no Discourse que buscaria conteúdo da nossa API e o exibiria. É possível adicionar scripts personalizados que façam XmlHttpRequests para outros servidores? Você vê algum motivo pelo qual isso não seria possível?
Ainda aguardo uma resposta para essa pergunta.
Obrigado!
Sim, isso é possível. Apenas tenha cuidado para não fazer com que essas requisições bloqueiem a renderização da página.