Crear usuario mediante programación con ID de usuario OAuth2

¿Existe alguna forma de insertar una fila dentro de la tabla user_associated_account desde la API REST?

Para darles algo de contexto, necesito poder crear usuarios en nuestra instancia de Discourse y vincularlos a nuestro proveedor OAuth2.
Cuando los usuarios inician sesión desde la interfaz de Discourse (a través del plugin OAuth2 Basic), su cuenta se vincula y puedo obtener su ID de usuario de Discourse desde su UID externo con GET /u/by-external/oauth2_basic/{external_uid}.
Sin embargo, cuando creamos usuarios desde la API REST (POST /users.json), no veo ninguna forma de vincular su cuenta con su cuenta OAuth2 correspondiente (si no inician sesión manualmente en Discourse).

Por si acaso, el plugin OAuth2 Basic implementó el nuevo sistema Auth::ManagedAuthenticator: https://github.com/discourse/discourse-oauth2-basic/pull/21

Lo que intenté:

  • Revisé la documentación de la API y no encontré ninguna pista.
  • Descubrí qué ruta de la API se llama para obtener las cuentas asociadas de un usuario: GET /u/{username}/emails.json. Pero esta ruta no parece soportar el método HTTP PUT y no expone los campos de la tabla user_associated_accounts (provider_name, provider_uid y user_id).
  • También revisé la configuración de Discourse por si había algo relacionado con este problema, sin éxito.
  • Consulté en meta.discourse.org y no encontré una solución.

¡Cualquier ayuda será muy apreciada! Gracias :slight_smile:

Mientras crees el usuario con la misma dirección de correo electrónico que OAuth, no tienes de qué preocuparte.

1 me gusta

¡Gracias por tu feedback!
Me gustaría no preocuparme por esto, pero necesito poder obtener al usuario desde mi ID de proveedor (GET /u/by-external/oauth2_basic/{external_uid}).
Esto no es posible hasta que el usuario inicie sesión manualmente a través de la interfaz de usuario (quiero evitar eso).

Consideraría exponer associated_accounts de esta manera al crear un nuevo usuario:

POST /users.json
{
  username: "something",
  email: "test@test.com",
  associated_accounts: [
    {
      provider_name: "oauth2_basic",
      provider_uid: "12345"
    }
  ]
}

¡Esto sería perfecto!

Nota: esto es similar a los parámetros provider y extern_uid de la API de Usuarios de Gitlab (Users API | GitLab Docs)