# Come posso consentire agli utenti di mettere mi piace ai post utilizzando REST API

**URL:** https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773
**Category:** Support
**Tags:** rest-api
**Created:** [2 Dicembre 2024, 10:08am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773 "2024-12-02T10:08:02Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Maduka\_Dilshan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maduka_dilshan/32/469573_2.png) [@Maduka\_Dilshan](https://meta.discourse.org/u/Maduka_Dilshan)
#### Post date: [2 Dicembre 2024, 10:08am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/1 "2024-12-02T10:08:02Z")

</div>

Ciao a tutti. Sono abbastanza nuovo a Discourse e ho controllato la sezione **Tutte le impostazioni del sito** (`/admin/site_settings`) per trovare un’opzione corrispondente per consentire a qualsiasi livello di utente di mettere “mi piace” ai post tramite RESTapi.

Al momento, tutti gli utenti possono (senza essere pubblici) creare argomenti, aggiungere risposte, ecc. Tuttavia, un utente normale (tl0, tl1, ecc.) non può mettere “mi piace” a nessun post tramite API (ma può mettere “mi piace” tramite il pannello web).

Ecco le impostazioni della mia categoria:

 ![image](https://global.discourse-cdn.com/meta/original/4X/7/9/1/79132a56f9c52680e5dc17b6657eb5f3663180fd.png)

Sto usando il seguente codice per aggiungere un “mi piace” tramite [API](https://docs.discourse.org/#tag/Posts/operation/performPostAction):

```plaintext
  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();
    }
  }

```

Restituisce:

```plaintext
Non sei autorizzato a visualizzare la risorsa richiesta.

```

Tuttavia, se accedo a Discourse come utente, quell’utente può mettere “mi piace”,

Finora ho integrato le API di creazione di argomenti, creazione di post e segnalibri con la stessa chiave API, le stesse categorie e lo stesso nome utente e funzionano senza problemi di autorizzazione.

Potreste aiutarmi a capire cosa sto sbagliando? Fatemi sapere se sono necessarie ulteriori informazioni.

Grazie

---

<div class="post-metadata">

### Author: ![Bas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/bas/32/294929_2.png) [@Bas](https://meta.discourse.org/u/Bas)
#### Post date: [2 Dicembre 2024, 10:10am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/2 "2024-12-02T10:10:37Z")

</div>

Penso che avrai bisogno di

> [@User API keys specification](https://meta.discourse.org/t/user-api-keys-specification/48536):
>
> Discourse contains a system for generating API keys per user if a very specific protocol is followed. This feature facilitates “application” access to Discourse instances without needing to involve moderators. High level description At a high level: Client (desktop app, browser plugin, mobile app) generates a private/public key pair and return url Client redirects to a route on discourse giving discourse its public key Discourse gets approval from user to use app Discourse generat…

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [2 Dicembre 2024, 10:21am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/3 "2024-12-02T10:21:32Z")

</div>

Non lo so, ma puoi semplificare le impostazioni della tua categoria usando solo `everyone`.

---

<div class="post-metadata">

### Author: ![Maduka\_Dilshan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maduka_dilshan/32/469573_2.png) [@Maduka\_Dilshan](https://meta.discourse.org/u/Maduka_Dilshan)
#### Post date: [2 Dicembre 2024, 10:24am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/4 "2024-12-02T10:24:49Z")

</div>

Ciao @Bas grazie per il commento,

ma perché solo per `like`? Ho già implementato la creazione di post, la creazione di risposte, l’aggiunta e la rimozione di segnalibri utilizzando l’API di Discourse con la chiave globale (livello utente: tutti gli utenti, ambito: globale)

Ho anche provato a creare una nuova chiave API globale, ma continuo a ricevere lo stesso errore ☹

Se la chiave API ha un ambito globale ed è valida per tutti gli utenti, allora la seguente API dovrebbe funzionare. non è vero?

> **[Discourse API Docs](https://docs.discourse.org/#tag/Posts/operation/performPostAction)**

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [2 Dicembre 2024, 10:34am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/5 "2024-12-02T10:34:03Z")

</div>

Sì, anche questo codice mi sembra buono.

Come / a cosa viene impostato `contentId`? È il `Post.id` corretto?

---

<div class="post-metadata">

### Author: ![Maduka\_Dilshan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maduka_dilshan/32/469573_2.png) [@Maduka\_Dilshan](https://meta.discourse.org/u/Maduka_Dilshan)
#### Post date: [2 Dicembre 2024, 10:46am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/6 "2024-12-02T10:46:18Z")

</div>

Ciao @RGJ

`contentId` è l’ID del post e sì, è l’ID corretto del post.

Con il seguente codice, registra,

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

```

Log,

```plaintext
[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
}

```

---

<div class="post-metadata">

### Author: ![Maduka\_Dilshan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/maduka_dilshan/32/469573_2.png) [@Maduka\_Dilshan](https://meta.discourse.org/u/Maduka_Dilshan)
#### Post date: [2 Dicembre 2024, 10:50am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/7 "2024-12-02T10:50:58Z")

</div>

Oh snap, penso di aver trovato il problema. 😬

Quando ho fatto il test usando il pannello web, ho erroneamente scelto un post di un altro utente (stesso titolo di quello che stavo testando) e ha avuto successo.

Ma quando l’ho testato usando il mio sistema, stavo cercando di aggiungere un like a un post proprio.

Mi scuso per qualsiasi inconveniente. Non ero a conoscenza del fatto che non fosse possibile mettere like ai propri post.

Grazie e buona giornata.

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [1 Gennaio 2025, 10:51am UTC](https://meta.discourse.org/t/how-can-i-allow-users-to-like-posts-using-restapi/339773/8 "2025-01-01T10:51:10Z")

</div>

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