Existe alguma maneira de encontrar o ID do tópico associado ou a URL do Discourse para uma página com incorporação do Discourse? Gostaria de fornecer a URL do Discourse para nosso schema.org discussionUrl json-ld que incluímos em nossas páginas com comentários incorporados. Por exemplo,
Olá a todos — Tenho acompanhado este tópico e tentado entender como funciona a função “Tópicos importados ficarão ocultos até que haja uma resposta”.
Basicamente, consegui incorporar com sucesso um tópico do Discourse em uma página da web, mas gostaria que a página incorporada mostrasse todas as postagens do tópico, e não apenas as respostas à postagem original.
A função “Tópicos importados ficarão ocultos até que haja uma resposta” não deveria fazer isso? Tive ativar/desativar essa opção e a opção “cortar postagens”, mas não percebi nenhuma diferença em nenhum dos casos.
Isso descreve nosso caso de uso atual. Tudo funciona conforme o esperado quando os usuários estão logados em ambos os sites.
O problema que tenho é que, se o usuário não estiver logado na nossa instância do Discourse (que não tem acesso anônimo), então ele não vê nada na página onde o embed foi inserido.
É possível fazer com que o embed exiba uma mensagem “Faça login no Discourse para ver a discussão” quando isso ocorrer?
O comportamento atual parece estranho, pois, se houver um problema com os logins, o usuário não vê nada. Há algum motivo para não exibir um link de login que redirecionaria para o site do Discourse?
Estou enfrentando o mesmo problema. Seria legal ver os comentários incorporados, mesmo que o site esteja configurado no modo privado. No geral, estou adorando o Discourse, e a capacidade de adicionar os comentários ao Ghost é um bônus!
Existe alguma maneira de passar um ID único de div a cada vez que o script é chamado? Tenho carregamento de conteúdo assíncrono sob meu artigo principal e gostaria que os comentários aparecessem nesses itens também. Claro, o problema com a configuração atual é que todos eles são exibidos no ID da div ‘discourse-comments’.
Desculpe, você poderia ser mais claro sobre o que quer dizer com isso? Não sou desenvolvedor Ruby, então, infelizmente, esse código não virá de mim. Cheguei a experimentar uma vez, mas não avancei muito.
Eu realmente pagaria por essa funcionalidade para ser adicionada. Você acha que postar no marketplace seria o caminho a seguir para isso? Obrigado.
Gostaríamos de usá-la em breve, mas temos mais de 30.000 blogs em nosso site. Não queremos que todos eles apareçam no fórum sem comentários. Como os blogs são inseridos como tópicos OnLoad, eu me pergunto se há uma maneira de inseri-los no fórum após um clique em um botão no embed, por exemplo, para que nem todos os blogs sejam inseridos ao serem visitados (via Google, por exemplo)?
Acredito que nossa nova página de visão geral de tópicos será inundada de blogs (para nossos administradores, pois eles começam invisíveis para os usuários normais do fórum).
Não existe tal recurso. A capacidade de criá-los como não listados foi adicionada para atender a esse caso de uso específico, mas consigo ver como isso pode ser insuficiente diante de 30 mil blogs.
Talvez você possa escrever um script para importar o histórico manualmente, mantendo as datas originais dos posts?
Não tenho 100% de certeza se o Google ignoraria o conteúdo marcado com nosnippet ou se isso apenas indicaria a ele para não exibi-lo na prévia da SERP?
Escrevi alguns scripts para migrar os comentários do nosso blog do Disqus para o fórum Discourse e, ao fazê-lo, criei vários tópicos usando a API do Discourse em vez de deixar que essa integração os criasse. Para as postagens antigas, estou usando o método de incorporação topicId, e as novas postagens a partir de agora estão usando o método discourseEmbedUrl.
No entanto, estou enfrentando um problema estranho em que alguns novos tópicos estão sendo criados de qualquer maneira. (Suspeito que isso seja devido a um erro do meu lado, quando tive brevemente alguns topicIds faltando em algumas postagens, e são esses que estão sendo criados como duplicatas.) Embora eu não ache que haja alguma solução para mim agora, gostaria de propor uma solução para o futuro.
Como o controlador de incorporação tenta localizar uma postagem existente pela coluna embed_url do banco de dados, gostaria de ver uma propriedade da API para definir esse campo ao criar um tópico. Isso permitiria que meu script de importação definisse essa propriedade para o tópico. Assim, a integração nem precisaria se preocupar em alternar entre os campos topicId e discourseEmbedUrl no JavaScript.
Acabei de rastrear a origem desse problema com o plugin de embed. Ao configurar o embedding, há uma configuração chamada “Allowed Hosts” (Hospitais Permitidos), que define o CSP para o iframe, fazendo com que o iframe apareça apenas nesse host. Por exemplo, se eu configurar os embeds com um host permitido de example.com e tentar incorporar o JS em attacker.com, o iframe se recusa a carregar com o erro:
Refused to frame 'https://forum.example.com/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' https://example.com".
No entanto, o JS já havia sido executado nesse momento e criou um tópico no fórum com qualquer URL fornecida ao código de embed.
No meu caso, o que está acontecendo é que usamos o Netlify para pré-visualizar builds, então uma cópia do blog está sendo servida a partir de URLs netlify.app, que estão carregando esse embed.js e criando a thread do fórum para as postagens que eu importei incorretamente anteriormente.
Isso não é necessariamente um problema de segurança, pois ainda é possível criar tópicos apenas para URLs no site configurado e que correspondam à lista de permissões de caminho. Mas é um problema nesta estratégia de migração, já que não havia como definir o embed_url nas threads do fórum ao migrar postagens antigas para o Discourse.
A solução é adicionar uma regra CSP para impedir que o embed.js seja executado em domínios que não estejam configurados na configuração de “allowed hosts”.
Como prova de conceito, copiei o código de embed para um domínio completamente não relacionado e defini o discourseEmbedUrl para uma das postagens antigas que importei. Ao carregar a página, o iframe foi bloqueado, mas o JS já havia sido executado e criado a thread do fórum.
Se você achar que isso é mais um problema de segurança do que um bug, ficarei feliz em excluir esta postagem e relatá-lo através do HackerOne.