Comment puis-je permettre aux utilisateurs d'aimer les publications en utilisant REST API

Salut à tous. Je suis assez nouveau sur Discourse et j’ai consulté la section Tous les paramètres du site (/admin/site_settings) pour trouver une option correspondante permettant à tout niveau d’utilisateur d’aimer des publications via l’API REST.

Pour le moment, tous les utilisateurs peuvent (sans être publics) créer des sujets, ajouter des réponses, etc. Cependant, un utilisateur normal (tl0, tl1, etc.) ne peut pas aimer une publication via l’API (mais peut aimer via le panneau web).

Voici mes paramètres de catégorie,

J’utilise le code suivant pour ajouter un like via l’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();
    }
  }

Cela renvoie,

Vous n'êtes pas autorisé à consulter la ressource demandée.

Cependant, si je me connecte à Discourse en tant qu’utilisateur, cet utilisateur peut aimer,

J’ai jusqu’à présent intégré les API de création de sujet, de création de publication et de mise en signet avec la même clé API, les mêmes catégories et le même nom d’utilisateur, et elles fonctionnent sans problème de permission.

Pourriez-vous s’il vous plaît m’aider à comprendre ce que je fais de mal ? Faites-moi savoir si plus d’informations sont nécessaires.

Merci

1 « J'aime »

Je pense que vous aurez besoin de

Je ne sais pas, mais vous pouvez simplifier vos paramètres de catégorie en utilisant uniquement everyone.

2 « J'aime »

Salut @Bas merci pour le commentaire,

mais pourquoi seulement pour like ? J’ai déjà implémenté la création de posts, la création de réponses, l’ajout et la suppression de favoris avec l’API Discourse en utilisant une clé globale (niveau utilisateur : tous les utilisateurs, portée : globale)

J’ai également essayé de créer une nouvelle clé API globale, mais j’obtiens toujours la même erreur :frowning:

Si la clé API a une portée globale et est valide pour tous les utilisateurs, alors l’API suivante devrait fonctionner. N’est-ce pas ?

Oui, ce code me semble bon également.

Comment / à quoi contentId est-il défini ? Est-ce le bon Post.id ?

Salut @RGJ

contentId est l’ID du post et oui, c’est le bon ID de post.

Avec le code suivant, il enregistre,

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

Journal,

[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, zut, je pense avoir trouvé le problème. :grimacing:

Lorsque j’ai effectué le test en utilisant le panneau web, j’ai accidentellement choisi un article d’un autre utilisateur (même titre que celui que je testais) et cela a réussi.

Mais lorsque je l’ai testé en utilisant mon système, j’essayais d’ajouter un “like” à mon propre article.

Veuillez m’excuser pour tout inconvénient. Je n’étais pas au courant qu’il n’était pas possible de “liker” ses propres articles.

Merci et bonne journée.

3 « J'aime »

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