API-Token in einer Theme-Komponente verstecken

Ich habe eine Theme-Komponente, die beim Laden einer Seite eine Anfrage an eine externe API sendet, um Daten abzurufen. Der Bearer-Token, den ich zum Abrufen dieser Daten verwende, wird jedoch naturgemäß im Skript geladen, auf das der Client Zugriff hat. Gibt es eine Möglichkeit, ein Plugin oder etwas Ähnliches zu erstellen, mit dem ich diese Informationen ausblenden kann?

1 „Gefällt mir“

Ja, Sie sollten in der Tat ein Plugin erstellen und eine Controller-Methode definieren, die die Daten für Sie abruft.

Rufen Sie dann aus dem Frontend-Code die Controller-Methode auf, die den Bearer-Token serverseitig injiziert, für Dritte unzugänglich macht und den Aufruf an die externe API durchführt.

4 „Gefällt mir“

Anstatt einen neuen Controller dafür zu erstellen (was nicht eindeutig ist, was Richard empfohlen hat), können Sie ihn recht einfach zu einem vorhandenen Serializer hinzufügen, etwas wie

  add_to_serializer(:current_user, :my_stuff) do
    stuff = get_my_stuff_somehow
    stuff
  end

Herauszufinden, welche Serializer verfügbar sind und welchen Sie möchten, ist hoffentlich einfach genug (die meisten sind recht leicht zu erraten, aber Sie finden sie in app/serializers); die Suche auf GitHub - discourse/all-the-plugins nach add_to_serializer sollte viele Beispiele liefern. Und beginnen Sie mit GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins.

Selbst wenn Sie kein Ruby oder Rails kennen, sollten die obigen Informationen Ihnen eine ziemlich gute Vorstellung davon geben, was Sie tun müssen. Wenn nicht, können Sie mit einem Budget in Marketplace fragen.

Ich halte es für eine sehr schlechte Idee, eine externe Abhängigkeit in einen Serializer einzuhängen @pfaffman
Wenn der externe Dienst ausfällt oder langsam ist, wird auch Ihr Forum ausfallen.

2 „Gefällt mir“

Oh. Nun, verdammt. Das klingt tatsächlich wahr. :person_shrugging:

@attj, das ist eine von vielen Angelegenheiten, bei denen ich Richard mehr vertraue als mir selbst.

Ich fürchte, Sie müssen die Arbeit leisten, eine Route und dergleichen hinzuzufügen, was ziemlich viele Codezeilen (wahrscheinlich nur Dutzende) mehr sind. Ich denke, Discourse Category Home 🏠 ist eine, die eine Route hinzufügt.

4 „Gefällt mir“

Ich glaube, ich habe es geschafft, ein Plugin zu schreiben, aber ich muss es auf GitHub stellen, um es in meine app.yml aufzunehmen. Was natürlich auch das Token preisgibt. Gibt es eine Möglichkeit, das zu umgehen?

2 „Gefällt mir“

Lesen Sie das Token einfach aus einer Website-Einstellung aus und geben Sie es dort nach der Installation ein.

3 „Gefällt mir“

Macht viel Sinn. Danke!

2 „Gefällt mir“

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