¿Cómo puedo obtener external_id del objeto de usuario?

Cuando uso la API para obtener el objeto de usuario de Discourse, funciona correctamente, pero no veo que se incluya el external_id. Si tengo un ID de usuario de Discourse o un nombre de usuario, ¿cómo puedo obtener el external_id a partir de eso?

http://localhost:3000/admin/users/1/blake.erickson.json

Tendrá la información de SSO:

Aja: estaba llamando a /users/blake.erickson.json (sin /admin), lo cual también devuelve un objeto de usuario, pero sin single_sign_on_record.

Oye, ¿por qué el endpoint /users/ acepta (¿solo?) un nombre de usuario, pero si quieres obtener un usuario por su ID de Discourse, es /admin/users/:id.json? ¿Son solo peculiaridades del diseño de la API?

Otra rareza más: si recupero un usuario por su external_id, llamando a /users/by-external/:id.json, tampoco obtengo el single_sign_on_record.

Así que la API tiene algunas peculiaridades… a veces un objeto de usuario incluye las propiedades de single_sign_on_record y a veces no :wink:

Por diseño, el punto final de administrador devolverá más datos que el punto final no administrador. Sí, ambos están obteniendo registros de “usuario”, pero sería terrible si el punto final /user/... que pueden llamar los usuarios regulares devolviera lo mismo que /admin/user/....

¡Ajá, no me había dado cuenta de que el endpoint /user estaría disponible para usuarios individuales. Se me olvidó que existen las claves de API de usuario.

Sigo sorprendido por las inconsistencias. Ahora mismo, si quiero obtener single_sign_on_record, tengo que conocer el ID de usuario de Discourse ( /admin/users/:username.json no funciona)… pero la mayoría de las demás llamadas a la API parecen requerir el nombre de usuario (como /users/:username.json).

Y luego están los endpoints de API separados que son muy similares y parecen casi idénticos, pero devuelven resultados diferentes; es decir, /admin/users me proporciona los datos de single_sign_on_record del usuario, pero llamar solo a /users/ no lo hace.

Nada de esto es un gran problema, lo estoy entendiendo a medida que avanzo… una vez que llegue más lejos, quizás pueda revisar un poco la documentación y hacer que algunas de estas cosas queden más claras.

La distinción aquí surge del hecho de que los endpoints devuelven los datos necesarios para renderizar las páginas en la interfaz de usuario. Echa un vistazo aquí:

¡Claro, lo entiendo perfectamente! De hecho, he estado usando ese truco para monitorear todas esas solicitudes XHR. Todo bien. Es solo que… inconsistente. :wink: Pero estoy infinitamente agradecido de que Discourse tenga una API tan potente.