Si oui, comment les utilisateurs non administrateurs peuvent-ils créer leur clé API ?
Si oui, y a-t-il des paramètres nécessaires pour activer la clé API pour les utilisateurs non administrateurs ?
La page des préférences du forum ne propose aucune interface pour créer une clé API. Je suppose donc qu’il existe des paramètres permettant aux utilisateurs de générer leurs propres clés API.
Merci ! J’ai examiné la section « Flux de génération de clé API ».
J’ai compris qu’il s’agit d’applications web pouvant fournir une URL auth_redirect. Existe-t-il une méthode recommandée pour les interfaces en ligne de commande (CLI) ou GitHub Actions ?
Si cela concerne une GitHub Action, vous serez probablement mieux avisé de créer une clé API limitée à un périmètre défini, qui autorise uniquement les actions dont vous avez besoin. Cependant, oui, vous devrez être administrateur pour créer cette clé.
Pour les programmes CLI, si cela est nécessaire, vous pouvez lancer un serveur web local et utiliser une URL http://localhost:XXXXX/callback. L’application fait quelque chose de similaire.
Je travaille sur cette branche et j’ai réussi à exécuter la commande en utilisant localhost comme URL de redirection. Cependant, après avoir cliqué sur le bouton pour autoriser, la page https://meta.discourse.org/user-api-key a signalé une erreur JavaScript et n’a pas pu poursuivre l’opération. Le script Ruby fonctionne, mais il échoue également lorsque j’ajoute le paramètre auth_redirect.
Voici l’exception rapportée dans la console du navigateur :
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)
Je vais joindre une capture d’écran de l’analyse du code JS. Il semble que siteAttribtues soit censé avoir une valeur correcte, mais il est undefined. Si vous avez des suggestions, n’hésitez pas à me les faire savoir. Merci !
Le JS lève une erreur, car la méthode POST pour /user-api-key renvoie une erreur 403 et la méthode build_not_found_page dans le contrôleur n’appelle pas la méthode preload_anonymous_data qui stocke la valeur préchargée.
Il n’est pas certain pourquoi le serveur a répondu 403 avec <h1 class="title">Oups ! Cette page est privée.</h1> lorsque j’ai ajouté le paramètre auth_redirect. J’ai essayé d’utiliser le même domaine pour l’URL de rappel (pour vérifier un problème de faille de type cross-site scripting) et le protocole HTTPS, mais sans succès.
Le discourse://auth_redirect ne fonctionne pas comme prévu pour moi, donc je vais demander aux utilisateurs de saisir manuellement le token chiffré, tout comme dans le code Ruby.
Note pour les autres utilisateurs : j’ai créé un module Node.js qui peut être invoqué via la commande npx. Il générera une clé API avec la portée write. J’espère que cela facilitera la configuration des systèmes nécessitant un jeton d’API Discourse.
Édition : Bonjour @KengoTODA. Votre code GitHub m’a été utile pour me diriger dans la bonne direction. Je suis encore en train de régler quelques détails, puis je rédigerai un bref compte rendu de la façon dont j’ai fait fonctionner les choses.
Le code GitHub de @KengoTODA m’a beaucoup aidé. J’ai maintenant une version fonctionnelle permettant d’authentifier les utilisateurs individuellement pour effectuer des appels API vers Discourse. J’ai décrit mes étapes ici : User API keys specification - #45 by JQ331