"Upload: Create" API-Schlüssel unzureichend?

Ich verwende den folgenden Code zum Hochladen über die API:

# Und fragen Sie Discourse, wohin es gesendet werden soll.
r = requests.post(
    f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
    print(
        f"Fehler beim Fragen, wohin das Bild hochgeladen werden soll: got {r.status_code}", file=sys.stderr)
    sys.exit(1)

upload_url = r.json()['url']
upload_uid = r.json()['unique_identifier']

# Jetzt legen Sie es dort ab, wo wir angewiesen wurden.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
    print(
        f"Fehler beim Hochladen des Bildes in den externen Speicher: got {r.status_code}", file=sys.stderr)
    sys.exit(1)

# Und teilen Sie Discourse mit, dass es funktioniert hat, und erhalten Sie eine ID, auf die wir später verweisen können.
r = requests.post(f"https://{DISCOURSE}/uploads/complete-external-upload",
                  data=f'unique_identifier={upload_uid}', headers=HEADERS)
if r.status_code != 200:
    print(f"Fehler beim Abschließen des Uploads: got {r.status_code}", file=sys.stderr)
    sys.exit(1)
image_id = r.json()['id']

Dies funktioniert mit einem „All Access“-API-Schlüssel, aber wenn ich versuche, einen granularen mit dem „uploads: create“-Bereich zu verwenden, erhalte ich einen 403-Fehler bei post zu /uploads/generate-presigned-put.

2 „Gefällt mir“

Guter Fang, wir werden das in Ordnung bringen. Beachten Sie, dass das Protokoll jetzt etwas komplexer ist, da wir direkt nach S3 hochladen.

2 „Gefällt mir“

Ich habe die API erst benutzt, nachdem Sie gewechselt haben, daher ist dies meines Wissens nach das normale Maß an Komplexität. :slight_smile:

Gibt es Situationen, in denen das Folgende nicht ausreicht?

  1. POST Dateiinformationen an /uploads/generate-presigned-put
    • Das Ergebnis enthält eine Remote-URL zum Hochladen (die Authentifizierungsparameter enthält) und eine eindeutige Upload-ID
  2. PUT Bilddaten an die obige URL
    • Fehlerbehandlung, falls dies fehlschlägt
  3. POST Upload-ID von oben an /uploads/complete-external-upload
    • Das Ergebnis ist eine Bild-ID, die man an anderen Stellen in der API verwenden kann (wie z. B. bei der Erstellung von Abzeichen)

Hallo @mattdm, ich habe den Geltungsbereich des API-Schlüssels für diese neuen Aktionen in unserem direkten Upload-Prozess aktualisiert und Ihre Website ebenfalls bereitgestellt. Bitte lassen Sie mich wissen, ob Sie weiterhin Probleme haben.

Bestätigt! Funktioniert jetzt. Danke!

3 „Gefällt mir“

Dieses Thema wurde nach 20 Stunden automatisch geschlossen. Neue Antworten sind nicht mehr möglich.