Beitrag kann nicht mit API gesperrt werden

Ich rufe ein paar Mal die API von Discourse aus meiner Anwendung auf, um Beiträge zu ändern.

Beim ersten Aufruf bearbeite ich den Beitrag. Das funktioniert bestens. Beim nächsten Aufruf versuche ich, den Beitrag zu sperren.

Mein Aufruf zum Sperren des Beitrags aus JavaScript sieht wie folgt aus:

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}),
});

Wenn ich diesen Aufruf ausführe, antwortet mir Discourse mit {locked: false}.

Ich habe versucht, den Beitrag manuell zu sperren und den API-Aufruf zu inspizieren, den der Discourse-Client macht. Er sieht meinem Aufruf aus meiner Anwendung sehr ähnlich, mit der Ausnahme der Authentifizierungsmethode, vielleicht.

Ich bin mir nicht sicher, was los ist, irgendwelche Ideen?

Ich sehe kein offensichtliches Problem. Haben Sie das erhalten, indem Sie How to reverse engineer the Discourse API befolgt haben? Das würde ich tun, um zu helfen, wenn ich an meinem Computer wäre.

1 „Gefällt mir“

Die API zum Sperren eines Beitrags ist hier dokumentiert: Discourse API Docs, aber ja, ich habe auch versucht, rückzuentwickeln, wie der Discourse-Client dies tut, und es sieht meiner Vorgehensweise aus meiner Anwendung sehr ähnlich.

1 „Gefällt mir“

Der Code lautet:

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

Was anscheinend einen String-Vergleich durchführt.

Das bedeutet, dass Sie \"locked\": \"true\" und nicht \"locked\": true senden müssten und dass die Dokumentation oder der Code aktualisiert werden müsste, um dieses Verhalten widerzuspiegeln oder zu ändern.

Der Browser sendet keine JSON-Anfrage, sondern Content-Type: application/x-www-form-urlencoded, was den Parameter als String interpretiert, und deshalb funktioniert es im Browser.

2 „Gefällt mir“

Vielen Dank für deine Hilfe Richard!

TIL!

Und ich werde PRing ein Update für die Dokumentation prüfen.

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