Como posso vincular a um perfil de usuário pelo ID do usuário?

Tenho uma tabela de membros no banco de dados da minha aplicação, onde armazeno informações específicas da aplicação sobre um subconjunto de membros. Uma das colunas é discourse_user_id. Gostaria de renderizar um link para o perfil do membro no Discourse. É possível fazer isso apenas com o ID do usuário?

Não estou armazenando discourse_user_name, pois o usuário pode alterá-lo, e eu teria que me preocupar em mantê-los sincronizados.

A única maneira que consigo pensar é fazer uma solicitação de API para /admin/users/<user-id>.json para obter o nome de usuário, mas isso resultaria em um grande número de solicitações ao carregar uma página de índice, onde estou listando membros com links para seus perfis.

A única outra coisa que me vem à mente é criar um plugin para adicionar uma rota, embora isso pareça muito esforço para algo que eu esperaria não ser a primeira pessoa a perguntar. Por isso, gostaria de verificar se já existe outra solução?

Uma ideia é colocar um ID externo no registro do usuário e, em seguida, você pode usar /by-external/:external_id. Outra opção é usar um webhook para notificar seu banco de dados externo caso eles alterem o nome de usuário. Outra alternativa é simplesmente desabilitar a alteração de nomes de usuário. De uma rápida olhada em discourse/config/routes.db, não vejo nenhuma rota que utilize o user_id.

Obrigado, @pfaffman, isso foi muito útil. Acredito que usar um ID externo seria ideal, pois também resolve outro problema — vincular na direção inversa.

Porém, ao examinar a documentação da API e um cliente REST, não vejo como atualizar esse campo. Posso usá-lo sem ativar o SSO? (E, mesmo que eu ativasse o SSO, seria possível atualizá-lo programaticamente?)

Desculpe, não sei ao certo. Teria que dar uma olhada no código-fonte.

Não há motivo para atualizar a chave externa; as chaves não devem mudar.

Outra coisa que você pode fazer é fazer com que ambos os sistemas confiem em que o endereço de e-mail seja o mesmo.

Minha aposta é que o SSO é o que você vai querer fazer.

Você pode tentar isso:

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

Você precisará passar a chave de API nos cabeçalhos, conforme documentado em outro lugar.

Criei um plugin para habilitar isso:

/user-by-id/123/summary redireciona para /u/janedoe/summary etc.

Ainda estou surpreso por ter tido que fazer isso, mas pelo menos funciona!