Se sì, come possono gli utenti non amministratori creare la propria chiave API?
Se sì, per abilitare la chiave API per gli utenti non amministratori, sono necessarie alcune impostazioni?
La pagina delle preferenze del forum non ha un’interfaccia per creare una chiave API. Quindi immagino che esistano delle impostazioni che consentano agli utenti di generare le proprie chiavi API.
Se si tratta di un’azione GitHub, è probabile che sia meglio creare una chiave API con ambito limitato, che consenta solo le azioni necessarie, ma sì, per creare questa chiave è necessario essere amministratori.
Per i programmi CLI, se necessario, puoi avviare un server web locale e utilizzare un URL http://localhost:XXXXX/callback. L’app fa qualcosa di simile.
Sto lavorando su questo branch e ho eseguito con successo il comando utilizzando localhost come URL di reindirizzamento. Tuttavia, dopo aver cliccato sul pulsante per autorizzare, la pagina https://meta.discourse.org/user-api-key ha segnalato un errore JS e non è stato possibile completare l’operazione. Lo script ruby funziona, ma fallisce anch’esso quando aggiungo il parametro auth_redirect.
Di seguito l’eccezione riportata nella console del browser:
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)
Allego uno screenshot dell’analisi del codice JS. Sembra che siteAttributes sia atteso come valore valido, ma risulta undefined. Se hai qualche suggerimento, fammelo sapere. Grazie!
Lo JS genera un errore perché il metodo POST per /user-api-key restituisce 403 e il metodo build_not_found_page nel controller non invoca il metodo preload_anonymous_data che memorizza il valore precaricato.
Non è chiaro perché il server abbia risposto con 403 e <h1 class="title">Oops! That page is private.</h1> quando ho aggiunto il parametro auth_redirect. Ho provato a utilizzare lo stesso dominio per l’URL di callback (per verificare un problema di cross-site scripting) e il protocollo HTTPS, ma senza successo.
discourse://auth_redirect non funziona come previsto nel mio caso, quindi chiederò agli utenti di inserire manualmente il token crittografato, proprio come nel codice Ruby.
Nota per gli altri utenti: ho creato un modulo Node che può essere invocato tramite il comando npx. Genererà una chiave API con ambito write. Spero che ciò possa aiutare nel processo di configurazione dei sistemi che necessitano di un token API di Discourse.
Modifica: Ciao @KengoTODA. Il tuo codice su GitHub mi è stato utile per indicarmi la strada giusta. Sto ancora sistemando alcune cose, poi scriverò brevemente come ho risolto il problema.
Il codice GitHub di @KengoTODA mi è stato di grande aiuto. Ora ho una versione funzionante per l’autenticazione degli utenti su base individuale per effettuare chiamate API a Discourse. Ho documentato i miei passaggi qui: User API keys specification - #45 by JQ331