Errore 404 restituito durante l'uso del gem DiscourseAPI per generare una chiave API utente

Ciao,

Sto cercando una soluzione a questo problema e spero che qualcuno qui possa darmi qualche indicazione. Recentemente mi sono unito a un nuovo progetto, sostituendo uno sviluppatore precedente. Ho appena aggiornato la build di Discourse all’ultima versione, dopo essere rimasto indietro di alcuni mesi, e tutte le altre funzionalità e chiamate API funzionano come previsto.

Quello che sto cercando di fare è utilizzare l’API per creare un argomento su Discourse dal nostro sito web, al di fuori di Discourse. Prendo l’ID dell’utente e lo cerco su Discourse utilizzando il metodo DiscourseAPI by_external_id. Una volta ottenuto, chiamo generate_user_api_key(discourse_user[‘id’]), passando l’ID dell’utente su Discourse.

La risposta è un errore DiscourseApi::NotFoundError / 404, che si verifica solo dopo l’aggiornamento.

Qualsiasi aiuto o indicazione sarà molto apprezzato!

La rotta per la generazione delle chiavi API è cambiata, ma il metodo nella gemma Discourse API utilizzato per generare una chiave API sta ancora chiamando la vecchia rotta. Ecco perché ricevi l’errore 404.

Provvederemo a correggere questo problema. Per il momento, se desideri generare una chiave API per un utente, puoi farlo effettuando una richiesta POST a http://localhost:3000/admin/api/keys. Ecco un esempio di richiesta CURL. Ho sostituito la mia effettiva chiave API con $api_key nell’esempio:

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"

Per questo non è necessario generare una chiave API per l’utente. Invece, puoi impostare client.api_username sul nome utente che desideri utilizzare per pubblicare il post:

client.api_username = "susan"
client.create_topic(category: 5, title: "L'argomento API davvero fantastico di Susan", skip_validation: true, raw: "questa è una prova, questa è solo una prova")

client.api_username = "bobby"
client.create_topic(category: 5, title: "L'argomento API davvero fantastico di Bobby", skip_validation: true, raw: "questa è una prova, questa è solo una prova")

Questo funzionerà correttamente a condizione che tu abbia utilizzato la chiave API Tutti gli utenti quando hai creato il client.

Grazie!

Ho aggiornato il mio codice per utilizzare la chiave “Tutti gli utenti” invece di generarne una per ogni utente e ho passato il nome utente dell’utente come api_username, e questo ha risolto il problema.