No se puede bloquear la publicación con la API

Hago un par de llamadas a la API desde mi aplicación a Discourse para modificar publicaciones.

En la primera llamada edito la publicación. Eso funciona muy bien. En la siguiente llamada intento bloquear la publicación.

Mi llamada para bloquear la publicación desde JavaScript se ve así:

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

Cuando ejecuto esta llamada, Discourse me responde con {locked: false}.

Intenté bloquear la publicación manualmente e inspeccionar la llamada a la API que hace el cliente de Discourse, y se ve muy similar a la que hago desde mi aplicación, con la excepción del método de autenticación, quizás.

¿No estoy seguro de qué está pasando, alguna idea?

No veo ningún problema obvio. ¿Lo obtuviste siguiendo Cómo hacer ingeniería inversa de la API de Discourse? Eso es lo que haría para ayudar si estuviera en mi computadora.

1 me gusta

La API para bloquear una publicación está documentada aquí Discourse API Docs, pero sí, también intenté hacer ingeniería inversa de cómo lo hace el cliente de Discourse, y se ve muy similar a la forma en que lo estoy haciendo desde mi aplicación.

1 me gusta

El código es

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

Lo que parece estar haciendo una comparación de cadenas.

Eso significa que necesitarías enviar \"locked\": \"true\" y no \"locked\": true, y que la documentación o el código necesitarían ser actualizados para reflejar o cambiar este comportamiento.

El navegador no envía una solicitud JSON, envía Content-Type: application/x-www-form-urlencoded que interpretará el parámetro como una cadena, y es por eso que funciona en el navegador.

2 Me gusta

¡Gracias por tu ayuda, Richard!

¡TIL!

Y echaré un vistazo a PRing una actualización de la documentación.

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