404-Fehler beim Verwenden des DiscourseAPI-Gems zur Generierung eines Benutzer-API-Schlüssels

Hallo,

ich habe Schwierigkeiten, eine Lösung für dieses Problem zu finden, und hoffe, dass jemand hier einen Hinweis hat. Kürzlich bin ich zu einem neuen Projekt gekommen und habe die Arbeit eines früheren Entwicklers übernommen. Ich habe kürzlich den Discourse-Build auf die neueste Version aktualisiert; er war einige Monate veraltet, und alle anderen Funktionen und API-Aufrufe funktionieren wie erwartet.

Mein Ziel ist es, über die API ein Thema in Discourse von unserer Website außerhalb von Discourse zu erstellen. Ich nehme die Benutzer-ID des Nutzers und suche ihn in Discourse mithilfe der Methode DiscourseAPI by_external_id. Sobald ich das habe, rufe ich generate_user_api_key(discourse_user[‘id’]) auf, wobei die ID des Benutzers in Discourse übergeben wird.

Daraufhin erhalte ich eine DiscourseApi::NotFoundError / 404-Fehlermeldung, die erst nach dem Upgrade aufgetreten ist.

Jede Hilfe oder Anleitung dazu wäre sehr willkommen!

Die Route zum Erstellen von API-Schlüsseln wurde geändert, aber die Methode in der Discourse-API-Bibliothek, die zum Erstellen eines API-Schlüssels verwendet wird, ruft weiterhin die alte Route auf. Deshalb erhalten Sie den 404-Fehler.

Wir werden dies beheben. Für den Fall, dass Sie vorübergehend einen API-Schlüssel für einen Benutzer erstellen möchten, können Sie eine POST-Anfrage an http://localhost:3000/admin/api/keys senden. Hier ist ein Beispiel für eine CURL-Anfrage. Im Beispiel habe ich meinen tatsächlichen API-Schlüssel durch $api_key ersetzt:

curl -X POST "http://localhost:3000/admin/api/keys" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "key[description]=a key for bobby" \
-F "key[username]=bobby"

Dafür müssen Sie keinen Benutzer-API-Schlüssel generieren. Stattdessen können Sie client.api_username auf den Benutzernamen setzen, den Sie für die Veröffentlichung des Beitrags verwenden möchten:

client.api_username = "susan"
client.create_topic(category: 5, title: "Susans wirklich tolles API-Thema", skip_validation: true, raw: "this is a test, this is only a test")

client.api_username = "bobby"
client.create_topic(category: 5, title: "Bobbys wirklich tolles API-Thema", skip_validation: true, raw: "this is a test, this is only a test")

Dies funktioniert korrekt, solange Sie beim Erstellen des client den API-Schlüssel für alle Benutzer verwendet haben.

Danke!

Ich habe meinen Code aktualisiert, um den „Alle Benutzer“-Schlüssel anstelle der Generierung eines eigenen für jeden Benutzer zu verwenden und den Benutzernamen als api_username zu übergeben. Das hat es behoben.