Estoy creando una acción de GitHub para publicar en el foro de Discourse.
Encontré la API de publicaciones, pero la documentación indica que los usuarios de Discourse deben crear una clave API desde el panel de administración, aunque los usuarios que no son administradores no tienen panel de administración. Aquí tengo varias preguntas:
¿Está diseñada la clave API también para usuarios que no son administradores?
De ser así, ¿cómo pueden los usuarios que no son administradores crear su clave API?
De ser así, ¿hay alguna configuración necesaria para habilitar la clave API para usuarios que no son administradores?
La página de preferencias del foro no tiene una interfaz para crear una clave API. Así que supongo que hay algunas configuraciones que permiten a los usuarios emitir sus propias claves API.
¡Gracias! He revisado la sección del ‘flujo de generación de claves de API’.
Entiendo que está destinado a aplicaciones web que pueden proporcionar una URL de auth_redirect.
¿Existe algún método recomendado para CLI o GitHub Actions?
Si esto es para una acción de GitHub, probablemente te convenga más crear una clave de API con ámbito restringido que solo permita las acciones que necesitas, pero sí, necesitarás ser administrador para crear esta clave.
Para programas CLI, si es necesario, puedes iniciar un servidor web local y usar una URL http://localhost:XXXXX/callback. La aplicación hace algo similar.
Estoy trabajando en esta rama y logré ejecutar el comando correctamente usando localhost como URL de redirección. Sin embargo, después de hacer clic en el botón para autorizar, la página https://meta.discourse.org/user-api-key mostró un error de JS y no pudo continuar con la operación. El script de Ruby funciona, pero también falla cuando agrego el parámetro auth_redirect.
A continuación se muestra la excepción reportada en la consola del navegador:
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)
Adjuntaré una captura de pantalla del análisis del código JS. Parece que se espera que siteAttributes tenga un valor correcto, pero está undefined. Si tienes alguna sugerencia para mí, por favor házmelo saber. ¡Gracias!
El JS lanza un error porque el método POST para /user-api-key devuelve 403 y el método build_not_found_page en el controlador no invoca el método preload_anonymous_data que almacena el valor precargado.
No está claro por qué el servidor respondió con 403 y <h1 class="title">¡Ups! Esa página es privada.</h1> cuando añadí el parámetro auth_redirect. Intenté usar el mismo dominio para la URL de devolución de llamada (para verificar un problema de inyección de scripts entre sitios) y el protocolo HTTPS, pero sin éxito.
discourse://auth_redirect no funciona como esperaba, así que intentaré pedir a los usuarios que introduzcan manualmente el token cifrado, tal como se muestra en el código Ruby.
Nota para otros usuarios: He creado un módulo de Node que se puede invocar mediante el comando npx. Generará una clave de API con el ámbito write. Espero que esto ayude en el proceso de configuración de sistemas que necesiten un token de la API de Discourse.
Edición: Hola @KengoTODA. Tu código de GitHub me ayudó a orientarme en la dirección correcta. Todavía estoy resolviendo algunos detalles, pero luego escribiré un poco sobre cómo logré que todo funcionara.
El código de GitHub de @KengoTODA me fue de gran ayuda. Ahora tengo una versión funcional para autenticar usuarios de manera individual y realizar llamadas a la API de Discourse. Detallé mis pasos aquí: User API keys specification - #45 by JQ331