Impossibile bloccare il post con API

Effettuo un paio di chiamate API dalla mia applicazione a Discourse per modificare i post.

Nella prima chiamata modifico il post. Funziona benissimo. Nella chiamata successiva provo a bloccare il post.

La mia chiamata per bloccare il post da JavaScript è la seguente:

fetch(`https://forum.hollowverse.com/posts/1817/locked.json`, {
  method: 'PUT',
  headers: {
    'Api-Key': process.env.DISCOURSE_SYSTEM_PRIVILEGE_SECRET,
    'content-type': 'application/json',
    'Api-Username': 'hollowbot',
  },
  body: JSON.stringify({locked: true}),
});

Quando eseguo questa chiamata, Discourse mi risponde con {locked: false}.

Ho provato a bloccare il post manualmente e a ispezionare la chiamata API che il client Discourse effettua, e sembra molto simile a quella che faccio dalla mia applicazione, con l’eccezione, forse, del metodo di autenticazione.

Non sono sicuro di cosa stia succedendo, qualche idea?

Non vedo un problema evidente. Hai ottenuto questo seguendo Come effettuare il reverse engineering dell’API di Discourse? Questo è quello che farei per aiutarti se fossi al mio computer.

1 Mi Piace

L’API per bloccare un post è documentata qui Discourse API Docs ma sì, ho anche provato a fare il reverse engineering di come lo fa il client Discourse, e sembra molto simile al modo in cui lo sto facendo dalla mia applicazione.

1 Mi Piace

Il codice è

params[:locked] === \"true\" ? locker.lock : locker.unlock

Che sembra fare un confronto di stringhe.

Ciò significa che dovresti inviare \"locked\": \"true\" e non \"locked\": true e che la documentazione o il codice dovrebbero essere aggiornati per riflettere o modificare questo comportamento.

Il browser non invia una richiesta JSON, invia Content-Type: application/x-www-form-urlencoded che interpreterà il parametro come una stringa, ed è per questo che funziona nel browser.

2 Mi Piace

Grazie per il tuo aiuto Richard!

TIL!

E darò un’occhiata a PRing un aggiornamento alla documentazione.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.