So verwenden Sie einen API-Schlüssel in einem AJAX-Aufruf?

Ich versuche, programmatisch über die Discourse-API Informationen über eine Gruppe abzurufen. Der Code dafür befindet sich in meinem „Customize Dashboard

Wird damit nicht der API-Schlüssel für alle Benutzer für jeden sichtbar, der deine Seite ansehen kann? Ich denke, du musst einen anderen Ansatz finden, um die Gruppendaten aus einer Theme-Komponente zu erhalten.

Wenn die Gruppeninformationen, die Sie benötigen, nicht in der für den Benutzer verfügbaren JSON-Last enthalten sind, müssen Sie herausfinden, wie Sie sie zum Serializer hinzufügen. Die Suche nach „add to serializer

Aber sollte der Code nicht in jedem Fall funktionieren? Die API bietet die Möglichkeit, Informationen über eine Gruppe abzurufen. Ich bin immer noch verwirrt darüber, wie das eigentlich funktionieren soll.

Was wäre der übliche Weg, die API zu verwenden, um Informationen über eine bestimmte Gruppe zu erhalten?

Der wichtigste Informationsteil, den ich benötige, ist, ob der Benutzer der Gruppeninhaber ist oder nicht. Diese Information wird von der JSON-API zurückgegeben. Wenn also ein Benutzer eine bestimmte Seite aufruft, möchte ich einen Aufruf an die API senden, um Informationen über eine Gruppe zu erhalten, die in der Basisantwort unter anderem angibt, ob der im Client angemeldete Benutzer der Inhaber ist.

Dies scheint eine unkomplizierte Implementierung der API zu sein. Es scheint jedoch, dass dieser Vorgang einen API-Schlüssel erfordert, aber die bisher von mir verwendete Methode funktioniert nicht.

Ich glaube nicht, dass es hier erforderlich ist, eine separate Plug-in- oder Theme-Komponente zu erstellen, da dieser Vorgang eine der grundlegenden Funktionen ist, die die JSON-API bereitstellt.

Ich bin neugierig, ob es eine Möglichkeit gibt, die API mit einem Schlüssel zu nutzen, der den Schlüssel nicht preisgibt (d. h. was wäre die Standard- bzw. beste Praxis zur Nutzung der API).

EDIT: Falls dies aus irgendeinem Grund für den API-Aufruf nicht geeignet ist, müsste es tatsächlich serialisiert werden. Hat jemand funktionierenden Code dafür? Ich weiß, dass es eine add_to_serializer-Methode gibt, aber ich habe die Syntax noch nicht ganz zum Laufen gebracht und habe Schwierigkeiten, funktionierende Beispiele für diese Methode zu finden.

Lieber @JQ331,

Ja, ich habe für dich (als Referenz) einen kurzen Check durchgeführt, mich als Mitarbeiter in ein Testforum eingeloggt und die Gruppe staff abgerufen. Dabei habe ich die erwarteten Ergebnisse erhalten:

JSON-Objekt für die Gruppe staff durch einen Mitarbeiter
{
  "group": {
    "id": 3,
    "automatic": true,
    "name": "staff",
    "display_name": "staff",
    "user_count": 1,
    "mentionable_level": 0,
    "messageable_level": 0,
    "visibility_level": 1,
    "automatic_membership_email_domains": null,
    "primary_group": false,
    "title": null,
    "grant_trust_level": null,
    "incoming_email": null,
    "has_messages": false,
    "flair_url": null,
    "flair_bg_color": null,
    "flair_color": null,
    "bio_raw": null,
    "bio_cooked": null,
    "bio_excerpt": null,
    "public_admission": false,
    "public_exit": false,
    "allow_membership_requests": false,
    "full_name": null,
    "default_notification_level": 3,
    "membership_request_template": null,
    "is_group_user": true,
    "is_group_owner": true,
    "members_visibility_level": 0,
    "can_see_members": true,
    "publish_read_state": false,
    "is_group_owner_display": false,
    "mentionable": false,
    "messageable": false
  },
  "extras": {
    "visible_group_names": [
      "admins",
      "moderators",
      "staff",
      "trust_level_0",
      "trust_level_1",
      "trust_level_2",
      "trust_level_3",
      "trust_level_4"
    ]
  }
}

… und ich habe es auch ausprobiert, ohne angemeldet zu sein, und habe das erwartete Ergebnis erhalten:

{"errors":["Sie sind nicht berechtigt, die angeforderte Ressource anzuzeigen."],"error_type":"invalid_access"}

Das bedeutet also, oder so scheint es mir, dass alles wie vorgesehen funktioniert.

Zur Info @JQ331: Für diese Aktion als angemeldeter Benutzer (über den Browser) benötigte ich keinen API-Schlüssel.

    "is_group_owner": true,

@neounix: Vielen Dank für deine Antwort. Das hat meine vergebliche Suche beendet. Ich dachte, der Grund für die „unauthorized“-Antwort sei ein Authentifizierungsproblem.

Wie sich herausstellte, hast du recht: Für diese Aktion wird kein API-Schlüssel benötigt. Vielmehr lag es an einem (einfachen) Codefehler, der aus dem von mir oben geposteten Code deutlich wird, den ich zuvor übersehen hatte (ich hatte fälschlicherweise die Variable für die AJAX-URL eingesetzt).

Hier ist der funktionierende Code:

var groupName = [RELEVANT GROUP NAME]
var token = [TOKEN I GENERATED]
$.ajax({
     url: 'https://myforum.com/groups/' + groupName + '.json',    //hier lag der alte Fehler
      contentType: "application/json",
        dataType: 'json',
        success: function(result){
             console.log('full response = ' + JSON.stringify(result));
             console.log('is group owner = ' + result.group.is_group_owner);  //beachte: dies ist entweder true oder null           
     }
})

Ich erhielt zuvor die „unauthorized“-Antwort, weil die vorherige URL, die ich eingegeben hatte, den falschen Gruppennamen enthielt (er wurde als „groupName“ interpretiert).