Wie kann ich Benutzern erlauben, Beiträge über REST-API zu mögen

Hallo zusammen. Ich bin ziemlich neu bei Discourse und habe den Abschnitt Alle Website-Einstellungen (/admin/site_settings) überprüft, um eine passende Option zu finden, die es Benutzern jeder Stufe ermöglicht, Beiträge über die REST-API zu liken.

Derzeit können alle Benutzer (ohne Öffentlichkeitsarbeit) Themen erstellen, Antworten hinzufügen usw. Ein normaler Benutzer (tl0, tl1 usw.) kann jedoch über die API keinen Beitrag liken (aber über das Webpanel liken).

Hier sind meine Kategorieeinstellungen:

Ich verwende den folgenden Code, um ein Like über die API hinzuzufügen:

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

Es wird ausgelöst:

Sie sind nicht berechtigt, die angeforderte Ressource anzuzeigen.

Wenn ich mich jedoch als Benutzer bei Discourse anmelde, kann dieser Benutzer ein Like vergeben.

Bisher habe ich die APIs für die Themen- und Beitragerstellung sowie für Lesezeichen mit demselben API-Schlüssel und denselben Kategorien und Benutzernamen integriert, und sie funktionieren ohne Berechtigungsprobleme.

Können Sie mir bitte helfen herauszufinden, was ich hier falsch mache? Lassen Sie mich wissen, wenn weitere Informationen benötigt werden.

Danke

1 „Gefällt mir“

Ich glaube, Sie werden brauchen

Ich weiß es nicht, aber Sie können Ihre Kategorieeinstellungen vereinfachen, indem Sie nur everyone verwenden.

2 „Gefällt mir“

Hallo @Bas, danke für den Kommentar,

aber warum nur für like? Ich habe bereits das Erstellen von Beiträgen, das Erstellen von Antworten, das Hinzufügen und Entfernen von Lesezeichen mit der Discourse API unter Verwendung eines globalen Schlüssels (Benutzerstufe: alle Benutzer, Geltungsbereich: global) implementiert.

Ich habe auch versucht, einen neuen globalen API-Schlüssel zu erstellen, erhalte aber immer noch dieselbe Fehlermeldung :frowning:

Wenn der API-Schlüssel einen globalen Geltungsbereich hat und für alle Benutzer gültig ist, dann sollte die folgende API funktionieren. Ist das nicht so?

Ja, dieser Code sieht für mich auch gut aus.

Wie / worauf wird contentId gesetzt? Ist es die richtige Post.id?

Hallo @RGJ

contentId ist die Beitrags-ID und ja, es ist die richtige Beitrags-ID.

Mit dem folgenden Code wird protokolliert:

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

Protokoll,

[Nest] 97134 - 12.02.2024, 16:10:29 LOG Anfrage an post_actions.json
[Nest] 97134 - 12.02.2024, 16:10:29 LOG Header: {
  "Accept": "application/json, text/plain, */*",
  "Api-Username": "m...91",
  "Api-Key": "66dc....18b56fbc17bcf"
}
[Nest] 97134 - 12.02.2024, 16:10:29 LOG Body: {
  "id": 84,
  "post_action_type_id": 2,
  "flag_topic": false
}

Oh Mist, ich glaube, ich habe das Problem gefunden. :grimacing:

Als ich den Test über das Webpanel gemacht habe, habe ich versehentlich einen Beitrag eines anderen Benutzers ausgewählt (gleicher Titel wie der, den ich getestet habe) und es hat funktioniert.

Aber als ich es über mein System getestet habe, habe ich versucht, einen eigenen Beitrag zu liken.

Entschuldigung für etwaige Unannehmlichkeiten. Mir war nicht bewusst, dass es nicht möglich ist, eigene Beiträge zu liken.

Danke und einen schönen Tag noch.

3 „Gefällt mir“

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