Esiste un modo per trovare l’ID del topic associato o l’URL di Discourse per una determinata pagina con embedding di Discourse? Vorrei fornire l’URL di Discourse per il nostro schema.org discussionUrl json-ld che includiamo nelle pagine con commenti incorporati. Ad esempio,
Ciao a tutti - Ho seguito questo argomento e ho cercato di capire come funziona la funzione “I topic importati rimarranno non elencati finché non ci sarà una risposta”.
In sostanza, ho incorporato con successo un topic di Discourse in una pagina web, ma vorrei che la pagina incorporata mostrasse tutti i post del topic, non solo le risposte al post originale.
Non dovrebbe essere la funzione “I topic importati rimarranno non elencati finché non ci sarà una risposta” a fare questo? Ho provato ad abilitare e disabilitare questa opzione e anche l’opzione “tronca i post”, ma non sembra esserci alcuna differenza in entrambi i casi.
Questo descrive il nostro caso d’uso attuale. Tutto funziona come previsto quando gli utenti sono loggati su entrambi i siti.
Il problema che riscontro è che, se l’utente non ha effettuato l’accesso alla nostra istanza di Discourse (che non prevede accesso anonimo), non vede nulla nella pagina in cui è stato inserito l’embed.
È possibile configurare l’embed in modo che mostri un messaggio “Effettua l’accesso a Discourse per vedere la discussione” in questo caso?
Comunque, il comportamento attuale sembra strano perché, se ci sono problemi con l’accesso, l’utente non vede nulla. C’è una ragione per non mostrare un link di accesso che reindirizzi al sito Discourse?
Sto riscontrando lo stesso problema. Sarebbe bello vedere i commenti incorporati anche se il sito è impostato in modalità privata. Nel complesso, sto adorando Discourse, e la possibilità di aggiungere i commenti a Ghost è un plus!
C’è un modo per passare un ID div univoco ogni volta che lo script viene chiamato? Ho un caricamento di contenuti asincrono sotto il mio articolo principale e vorrei che i commenti apparissero anche su quegli elementi. Ovviamente, il problema con l’impostazione attuale è che tutti vengono mostrati nell’ID div ‘discourse-comments’.
Scusa, puoi essere più chiaro su cosa intendi? Non sono uno sviluppatore Ruby, quindi purtroppo quel codice non verrà da me. Ci ho provato una volta, ma non sono andato molto lontano.
In realtà pagherei volentieri per avere questa funzionalità. Pensi che pubblicare nel marketplace sarebbe la strada giusta? Grazie.
Vorremmo utilizzarla presto, ma abbiamo oltre 30.000 blog sul nostro sito. Non vogliamo che tutti vengano inseriti nel forum senza commenti. Dato che i blog vengono inseriti come argomenti OnLoad, mi chiedevo se esistesse un modo per inserirli nel forum solo dopo un clic su un pulsante nell’embed, ad esempio, in modo che non tutti i blog vengano caricati quando visitati (ad esempio da Google)?
Credo che la nostra nuova pagina di panoramica degli argomenti sarà invasa dai blog (per i nostri amministratori, poiché inizialmente saranno invisibili per gli utenti normali del forum).
Non esiste una tale funzionalità. La possibilità di crearle come non elencate è stata aggiunta per rispondere a questo caso d’uso specifico, ma capisco come possa essere comunque insufficiente di fronte a 30.000 blog.
Forse puoi scrivere uno script per importare manualmente la cronologia con le date originali dei post?
Non sono sicuro al 100% se Google ignori il contenuto contrassegnato da nosnippet o se si limiti a comunicargli di non visualizzarlo nell’anteprima dei risultati di ricerca (SERP).
Ho scritto alcuni script per migrare i commenti del nostro blog da Disqus al forum Discourse. Nel farlo, ho creato un gran numero di argomenti utilizzando direttamente l’API di Discourse, invece di lasciare che fosse l’integrazione a crearli. Per i vecchi post, sto utilizzando il metodo di embedding topicId, mentre per i nuovi post futuri sto adottando il metodo discourseEmbedUrl.
Tuttavia, riscontro un problema strano per cui alcuni nuovi argomenti vengono comunque creati. (Sospetto che ciò sia dovuto a un bug da parte mia, quando ho avuto temporaneamente alcuni topicId mancanti in alcuni post, ed è proprio quelli che vengono creati come duplicati.) Anche se al momento non credo esista una soluzione per me, vorrei proporre una soluzione per il futuro.
Poiché il controller di embedding cerca di individuare un post esistente in base alla colonna del database embed_url, vorrei vedere una proprietà nell’API per impostare tale campo al momento della creazione di un argomento. Questo permetterebbe al mio script di importazione di impostare questa proprietà per l’argomento. Di conseguenza, l’integrazione non avrebbe nemmeno bisogno di preoccuparsi di passare dal campo topicId al campo discourseEmbedUrl nel JavaScript.
Ho appena individuato la fonte di questo problema con il plugin embed. Durante la configurazione dell’embedding, esiste un’impostazione “Allowed Hosts” (Host consentiti), che imposta quindi la CSP per l’iframe; l’iframe verrà visualizzato solo su tale host. Ad esempio, se configuro gli embed con un host consentito come example.com e provo a incorporare lo script JS su attacker.com, l’iframe rifiuta di caricarsi con l’errore:
Refused to frame 'https://forum.example.com/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' https://example.com".
Tuttavia, in questo punto lo script JS è già stato eseguito e ha creato un argomento sul forum con l’URL fornito al codice di embedding.
Nel mio caso, ciò che sta accadendo è che utilizziamo Netlify per l’anteprima delle build, quindi una copia del blog viene effettivamente servita da URL netlify.app, che carica poi quel embed.js e crea il thread del forum per i post che avevo importato in precedenza in modo errato.
Non si tratta necessariamente di un problema di sicurezza, poiché è comunque possibile creare argomenti solo per gli URL del sito configurato e che corrispondono alla lista bianca dei percorsi. Tuttavia, è un problema in questa strategia di migrazione, dato che non avevo modo di impostare embed_url sui thread del forum durante la migrazione dei vecchi post in Discourse.
La soluzione consiste nell’aggiungere una regola CSP per impedire che embed.js venga eseguito su domini non configurati nell’impostazione “allowed hosts”.
Come prova di concetto, ho copiato il codice di embedding su un dominio completamente non correlato e ho impostato discourseEmbedUrl su uno dei vecchi post che avevo importato. Ho caricato la pagina e l’iframe è stato bloccato, ma lo script JS era già stato eseguito e aveva creato il thread del forum.
Se ritieni che si tratti più di un problema di sicurezza che di un bug, sono felice di eliminare questo post e segnalarlo tramite HackerOne.