ich erstelle eine GitHub-Action, die Beiträge im Discourse-Forum veröffentlicht.
Ich habe die Post-API gefunden, aber die Dokumentation besagt, dass Discourse-Benutzer einen API-Schlüssel über das Admin-Panel erstellen müssen, obwohl Nicht-Administratoren kein Admin-Panel haben. Hier habe ich einige Fragen:
Ist der API-Schlüssel auch für Nicht-Administratoren vorgesehen?
Wenn ja, wie können Nicht-Administratoren ihren API-Schlüssel erstellen?
Wenn ja, gibt es erforderliche Einstellungen, um den API-Schlüssel für Nicht-Administratoren zu aktivieren?
Die Präferenzen-Seite des Forums bietet keine Oberfläche zum Erstellen eines API-Schlüssels. Ich vermute daher, dass es einige Einstellungen gibt, die es Benutzern ermöglichen, ihre eigenen API-Schlüssel auszustellen.
Vielen Dank! Ich habe den Abschnitt ‘Ablauf zur Generierung von API-Schlüsseln’ geprüft.
Ich habe verstanden, dass dies für Webanwendungen gilt, die eine auth_redirect-URL bereitstellen können. Gibt es eine empfohlene Vorgehensweise für CLI oder GitHub Actions?
Wenn dies für eine GitHub-Action ist, ist es wahrscheinlich besser, einen bereichsbegrenzten API-Schlüssel zu erstellen, der nur die benötigten Aktionen erlaubt. Ja, Sie müssen jedoch ein Administrator sein, um diesen Schlüssel zu erstellen.
Für CLI-Programme können Sie, falls erforderlich, einen lokalen Webserver starten und eine http://localhost:XXXXX/callback-URL verwenden. Die App verfährt ähnlich.
Ich arbeite an diesem Branch und habe den Befehl erfolgreich mit localhost als Weiterleitungs-URL ausgeführt. Nachdem ich jedoch auf den Button zur Autorisierung geklickt habe, meldete die Seite https://meta.discourse.org/user-api-key einen JS-Fehler, und die Operation konnte nicht fortgesetzt werden. Das Ruby-Skript funktioniert zwar, schlägt aber ebenfalls fehl, wenn ich den Parameter auth_redirect hinzufüge.
Hier ist die im Browser-Console gemeldete Ausnahme:
Uncaught TypeError: Cannot set property 'isReadOnly' of undefined
at Function.createCurrent (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:44867)
at Function.current (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:8816)
at Object.initialize (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:70403)
at Object.i.initialize (_application-42d4413fabab7a4b12e0c25fb01f736af560aa283089071a8493f37c9b042a4a.js:7001)
at _ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:49660
at i.each (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67904)
at i.walk (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67891)
at n.each (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67858)
at n.topsort (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:67758)
at t._runInitializer (_ember_jquery-189e46ebcb33594b835e782fd1ce916ec750bc0cf980ebc4fb7796649161a18d.js:49667)
Ich werde den Screenshot aus der JS-Code-Analyse anhängen. Es scheint, dass siteAttribtues einen korrekten Wert haben sollte, aber undefined ist. Wenn du einen Vorschlag für mich hast, lass es mich bitte wissen. Vielen Dank!
Das JS wirft einen Fehler aus, da die POST-Methode für /user-api-key einen 403-Statuscode zurückgibt und die build_not_found_page-Methode im Controller die preload_anonymous_data-Methode nicht aufruft, die den vorgehaltenen Wert speichert.
Es ist unklar, warum der Server mit auth_redirect-Parameter eine 403-Antwort mit <h1 class="title">Oops! That page is private.</h1> zurückgab. Ich habe versucht, dieselbe Domain für die Callback-URL (zur Überprüfung von Cross-Site-Scripting-Problemen) und das HTTPS-Protokoll zu verwenden, aber ohne Erfolg.
discourse://auth_redirect funktioniert für mich nicht wie erwartet, daher werde ich versuchen, die Benutzer bitten, den verschlüsselten Token manuell einzugeben, genau wie im Ruby-Code beschrieben.
Hinweis für andere Benutzer: Ich habe ein Node-Modul erstellt, das über den Befehl npx aufgerufen werden kann. Es erstellt einen API-Schlüssel mit dem write-Berechtigungsbereich. Ich hoffe, das hilft bei der Einrichtung von Systemen, die ein Discourse-API-Token benötigen.
Edit: Hallo @KengoTODA. Dein GitHub-Code hat mir geholfen, in die richtige Richtung zu finden. Ich arbeite noch ein paar Dinge aus und werde dann kurz aufschreiben, wie ich alles zum Laufen gebracht habe.
@KengoTODAs GitHub-Code hat mir sehr geholfen. Ich habe nun eine funktionierende Version, um Benutzer einzeln zu authentifizieren und API-Aufrufe an Discourse zu tätigen. Meine Vorgehensweise habe ich hier dokumentiert: User API keys specification - #45 by JQ331