¡Hola! Me encanta usar la API de Discourse.
Siguiendo la guía sobre ingeniería inversa de la API, me he encontrado con un problema al intentar que la API envíe un enlace de inicio de sesión.
Contexto de por qué estoy haciendo esto
He creado un servicio de SSO para un hackerspace local para que los usuarios puedan iniciar sesión en nuestro Discourse con el sistema de membresía del hackerspace.
Sin embargo, algunas personas pueden haber utilizado una dirección de correo electrónico diferente en el sistema de membresía que en Discourse. Como el inicio de sesión local está deshabilitado cuando SSO está activado, me gustaría que las personas pudieran hacer clic en «Enviarme un enlace de inicio de sesión» para que puedan iniciar sesión y luego actualizar su dirección de correo electrónico si lo desean (o seguir usando el enlace de inicio de sesión, lo que prefieran).
Objetivo
Me gustaría enviar un enlace de inicio de sesión al usuario @ domain .co.uk a través de la API.
He intentado lo siguiente:
curl -X POST "https://discourse.<site>.org.uk/u/email-login" --data "{\"login\":\"user\"%\"40domain.co.uk\"}" -H "Api-Key: xxxxx" -H "Api-Username: system" -H "Content-Type: application/json"
Lo que obtengo como respuesta es:
<html><body>Estás siendo <a href="https://discourse.<site>.org.uk/">redirigido</a>.</body></html>
Si no incluyo la clave de API, obtengo [BAD CSRF] como respuesta.
Así que en lo que estoy atascado es: ¿cómo puedo hacer que Discourse envíe un enlace de inicio de sesión por correo electrónico al usuario @ domain .co.uk a través de la API?
Muchas gracias por cualquier ayuda. Seguiré probando cosas para ver qué funciona.
P.D. Me gustaría no tener que usar un truco como:
Hacer una solicitud a /session/csrf y guardar el token CSRF.
Luego hacer una solicitud a /u/email-login con el token CSRF.
¿Es posible hacer esto solo con una clave de API?
¡Gracias!
![]()