Sto costruendo un sito WP headless per una rivista che ha la sua community su Discourse e i commenti devono essere integrati nelle pagine degli articoli. Ho trovato la documentazione API ed ero molto contento, dato che l’embed tramite iframe non era proprio ciò che cercavo, poiché il sito avrà una modalità scura e una chiara, quindi ho bisogno che il template dei commenti erediti le variabili CSS dall’elemento radice.
Tuttavia, continuo a imbattermi nel limite di velocità quando provo ad accedere all’API direttamente (usando fetch su https://discourseurl.com/t/{id}.json), quindi ho pensato di provare ad aggiungere una chiave API e autenticarmi con essa.
Sto usando questo codice:
fetch(this.apiUrl, {
headers: {
'User-Api-Key': '{chiave API utente da Discourse admin}',
},
})
e ricevo questo errore, indipendentemente dalla chiave che uso (provando anche con una chiave admin):
error_type: "invalid_access"
errors: Array [ "Non hai l'autorizzazione per visualizzare la risorsa richiesta." ]
Traduzione approssimativa: "Non hai accesso alla risorsa richiesta".
Sto dimenticando qualcosa riguardo al funzionamento delle chiavi API? Qual è l’approccio consigliato per richiedere questi endpoint API senza superare il limite di velocità?
Dai un’occhiata alla sezione Autenticazione, che si trova nella parte superiore di https://docs.discourse.org/. Fornisce un esempio su come impostare le tue credenziali API nell’intestazione della richiesta. Devi utilizzare Api-Key e Api-Username nell’intestazione.
Grazie! Non riesco a immaginare come abbia potuto saltare la parte relativa all’autenticazione, ho letto e riletto la documentazione più e più volte
Comunque, sembra che stia facendo qualche progresso, ma ora mi imbatto in questo problema nella console del browser: (Reason: missing token 'api-key' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel).
Non sono sicuro di cosa possa causarlo, non riesco a trovare nulla a riguardo nemmeno nel forum. Mi sto perdendo qualcosa? La cosa strana è che sto specificando l’intestazione come ‘Api-Key’ nel mio codice. Qualche idea?
Sembra che tu stia costruendo un’app JavaScript e che stia effettuando le richieste API dal browser?
L’approccio consigliato sarebbe effettuare le chiamate API al server Discourse lato server, in modo che la tua app JavaScript comunichi con il tuo server esattamente come fa con WordPress. In questo modo eviterai eventuali problemi CORS.
Ah, fantastico! Questo mi ha portato a esaminare il codice di WP Discourse e mi sono reso conto che mi manca solo un’opzione per esporre l’endpoint API di cui ho bisogno (esporre i commenti di Discourse tramite un’API). Dovrò solo apportare qualche piccola modifica. È eccellente, grazie mille
Sono solo curioso: perché non è consigliato interagire direttamente con l’API di Discourse dal lato client? Ho alcune idee per espandere il progetto in futuro, se ci sarà un budget (ad esempio, con una funzionalità di login), e mi piacerebbe che comunicasse con l’API di Discourse. Dovrei instradare tutto attraverso WordPress?