Chiave API "Upload: Create" insufficiente?

Sto usando il seguente codice per caricare tramite l’API:

# E chiedi a Discourse dove inviarlo.
r = requests.post(
    f"https://{DISCOURSE}/uploads/generate-presigned-put", json=file_info, headers=HEADERS)
if r.status_code != 200:
    print(
        f"Errore nel chiedere dove caricare l'immagine: ricevuto {r.status_code}", file=sys.stderr)
    sys.exit(1)

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

# Ora mettilo dove ci è stato detto di metterlo.
r = requests.put(upload_url, data=image_data)
if r.status_code != 200:
    print(
        f"Errore nel caricare l'immagine nello spazio di archiviazione esterno: ricevuto {r.status_code}", file=sys.stderr)
    sys.exit(1)

# E comunica a Discourse che ha funzionato, e ottieni un ID a cui fare riferimento in seguito.
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"Errore nel completare il caricamento: ricevuto {r.status_code}", file=sys.stderr)
    sys.exit(1)
image_id = r.json()['id']

Questo funziona con una chiave API “tutto accesso”, ma quando provo a usarne una granulare con lo scope “uploads: create”, ricevo un errore 403 su post a /uploads/generate-presigned-put.

2 Mi Piace

Ottima osservazione, risolveremo questo problema. Tieni presente che il protocollo è ora un po’ più complesso poiché carichiamo direttamente su s3.

2 Mi Piace

Ho iniziato a usare l’API solo dopo il tuo passaggio, quindi per quanto ne so questo è il normale livello di complessità. :slight_smile:

Ci sono situazioni in cui quanto segue non è sufficiente?

  1. POST informazioni sul file a /uploads/generate-presigned-put
    • il risultato include un URL remoto a cui caricare (che include parametri di autenticazione) e un ID di caricamento univoco
  2. PUT dati dell’immagine all’URL sopra indicato
    • gestire l’errore se questo fallisce
  3. POST ID di caricamento da sopra a /uploads/complete-external-upload
    • il risultato è un ID immagine che si può usare altrove nell’API (come la creazione di badge)

Ciao @mattdm Ho aggiornato l’ambito della chiave API per coprire queste nuove azioni per il nostro flusso di caricamento diretto e ho anche distribuito il tuo sito, fammi sapere se hai ancora altri problemi.

Confermato! Funziona ora. Grazie!

3 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 20 ore. Non sono più consentite nuove risposte.