¿Cómo puedo permitir a los usuarios dar me gusta a publicaciones mediante REST API?

Hola a todos. Soy bastante nuevo en Discourse y revisé la sección Todos los ajustes del sitio (/admin/site_settings) para encontrar una opción que permitiera a cualquier nivel de usuario dar “me gusta” a las publicaciones usando la API REST.

En este momento, todos los usuarios pueden (sin ser públicos) crear temas, agregar respuestas, etc. Sin embargo, un usuario normal (tl0, tl1, etc.) no puede dar “me gusta” a ninguna publicación a través de la API (pero puede hacerlo usando el panel web).

Aquí están la configuración de mi categoría:

Estoy usando el siguiente código para agregar un “me gusta” a través de la API

  public async likeOrThrow(contentId: number, username: string) {
    try {
      this.overrideUsername(username);
      const res = await this.client.post(`post_actions.json`, {
        id: contentId,
        post_action_type_id: 2,
        flag_topic: false,
      });
      return res.data;
    } catch (error) {
      throw this.getException(error);
    } finally {
      this.resetUsername();
    }
  }

Esto lanza:

No tienes permiso para ver el recurso solicitado.

Sin embargo, si inicio sesión en Discourse como el usuario, ese usuario puede dar “me gusta”.

Hasta ahora, he integrado las API de creación de temas, creación de publicaciones y marcadores con la misma clave API, las mismas categorías y el mismo nombre de usuario, y funcionan sin problemas de permisos.

¿Podrían ayudarme a averiguar qué estoy haciendo mal? Avísenme si se necesita más información.

Gracias.

1 me gusta

Creo que necesitarás

No lo sé, pero puedes hacer que la configuración de tu categoría sea más fácil usando solo everyone.

2 Me gusta

Hola @Bas, gracias por el comentario,

pero ¿por qué solo para like? Ya implementé la creación de publicaciones, la creación de respuestas, la adición y eliminación de marcadores con la API de Discourse usando la clave global (nivel de usuario: todos los usuarios, alcance: global).

También intenté crear una nueva clave API global, pero sigo recibiendo el mismo error :frowning:

Si la clave API tiene alcance global y es válida para todos los usuarios, entonces la siguiente API debería funcionar. ¿No es así?

Sí, este código también me parece bien.

¿Cómo / a qué se está estableciendo contentId? ¿Es el Post.id correcto?

Hola @RGJ

contentId es el id de la publicación y sí, es el id de publicación correcto.

Con el siguiente código, registra,

      this.client.interceptors.request.use((config) => {
        Logger.log(`Request to ${config.url}`);
        Logger.log(`Headers: ${JSON.stringify(config.headers, null, 2)}`);
        Logger.log(`Body: ${JSON.stringify(config.data, null, 2)}`);
        return config;
      })

Registro,

[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Request to post_actions.json
[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Headers: {
  "Accept": "application/json, text/plain, */*",
  "Api-Username": "m...91",
  "Api-Key": "66dc....18b56fbc17bcf"
}
[Nest] 97134  - 12/02/2024, 4:10:29 PM     LOG Body: {
  "id": 84,
  "post_action_type_id": 2,
  "flag_topic": false
}

Oh, ¡vaya!, creo que encontré el problema. :grimacing:

Cuando hice la prueba usando el panel web, elegí por error una publicación de otro usuario (con el mismo título que estaba probando) y funcionó.

Pero cuando lo probé usando mi sistema, estaba intentando dar “me gusta” a mi propia publicación.

Disculpas por cualquier inconveniente. No sabía que no era posible dar “me gusta” a las propias publicaciones.

Gracias y que tengas un buen día.

3 Me gusta

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