¿Cómo puedo enlazar a un perfil de usuario por su ID de usuario?

Tengo una tabla de miembros en la base de datos de mi aplicación, donde almaceno información específica de la aplicación sobre un subconjunto de miembros. Una de las columnas es discourse_user_id. Me gustaría generar un enlace al perfil de Discourse del miembro. ¿Es posible hacerlo solo con su ID de usuario?

No estoy almacenando discourse_user_name porque el usuario puede cambiarlo, y luego tendría que preocuparme por mantenerlos sincronizados.

La única forma que se me ocurre es hacer una solicitud a la API a /admin/users/<user-id>.json para obtener su nombre de usuario, pero eso implicaría un gran número de solicitudes en una página de índice, donde estoy listando miembros con enlaces a sus perfiles.

Lo único más que se me ocurre es crear un plugin para añadir una ruta, aunque eso parece mucho esfuerzo para algo que espero no sea la primera persona en preguntar, así que quería consultar si ya existe otra solución.

Una idea es incluir un ID externo en el registro del usuario y luego podrías usar /by-external/:external_id. Otra opción es utilizar un webhook para notificar a tu base de datos externa si cambian su nombre de usuario. Otra alternativa es simplemente deshabilitar el cambio de nombres de usuario. Tras una mirada rápida a discourse/config/routes.db, no veo ninguna ruta que utilice el user_id.

Gracias @pfaffman, eso es muy útil. Creo que usar un ID externo sería ideal, ya que también resuelve otro problema: enlazar en la dirección inversa.

Sin embargo, al explorar la documentación de la API y un cliente REST, no veo cómo actualizar ese campo. ¿Puedo usarlo sin habilitar SSO? (Y, incluso si habilitara SSO, ¿podría actualizarlo programáticamente?)

Lo siento, no lo sé de momento. Tendría que revisar el código fuente.

No hay ninguna razón para actualizar la clave externa; las claves no deberían cambiar.

Otra opción que podrías considerar es que ambos sistemas confíen en que la dirección de correo electrónico sea la misma.

Mi suposición es que lo que necesitarás es implementar SSO.

Puedes probar esto:

https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true

Necesitarás pasar la clave de API en los encabezados, tal como se documenta en otro lugar.

1 me gusta

He creado un plugin para habilitar esto:

/user-by-id/123/summary redirige a /u/janedoe/summary, etc.

Todavía me sorprende que haya tenido que hacer esto, ¡pero al menos funciona!

2 Me gusta