Quando o Discourse atua como provedor de identidade, ele salva os IDs de usuário externos?

Estou usando o Discourse como provedor de identidade para meu aplicativo Rails (você faz login no meu aplicativo Rails com seu login do Discourse; não o contrário). Gostaria de adicionar um link nas páginas de perfil do usuário no Discourse para levá-lo ao perfil respectivo em meu aplicativo Rails. Para fazer isso, o Discourse precisaria saber o ID do usuário em meu aplicativo/banco de dados Rails.

Sei que o DiscourseConnect salva o ‘external_id’ quando é feito da outra maneira (fazer login no Discourse com algum outro login). Mas ele salva alguma coisa quando é desta maneira?

Se não, algum conselho para armazená-lo?

1 curtida

Não salva, então você precisará de algo personalizado.

Eu me pergunto se faria mais sentido lidar com isso em seu aplicativo Rails, já que ele conhece o ID do Discourse de um usuário?

Você poderia configurar uma rota como /profile-by-discourse-id/:discourse_id que procura o usuário relevante com base no ID do Discourse e, em seguida, redireciona para o perfil do usuário no aplicativo Rails.

1 curtida

Obrigado @david. Curiosamente, foi exatamente isso que fiz para vincular na outra direção (da minha aplicação Rails para os perfis de usuário do Discourse) através deste plugin do Discourse (/user-by-id/123/summary), já que minha aplicação Rails armazena o ID do usuário do Discourse em vez do nome de usuário (já que os nomes de usuário podem mudar).

Essa solução funcionaria na outra direção, exceto pelo fato de que nem todos os usuários do fórum têm perfis de usuário na minha aplicação Rails. Um usuário Rails só é criado quando o usuário do Discourse “entra” na organização, enquanto o fórum do Discourse pode ter não membros.

Então, suponho que minhas duas opções sejam:
A) Criar um plugin JavaScript que envie uma solicitação AJAX para minha aplicação Rails para determinar se o usuário do Discourse também é um usuário na aplicação Rails e, em caso afirmativo, renderizar um link; ou
B) No momento em que o usuário Rails é criado e vinculado ao usuário do Discourse, além de armazenar o ID do usuário do Discourse no banco de dados da aplicação Rails, de alguma forma armazenar o ID do usuário Rails no perfil do usuário do Discourse (por exemplo, como um campo de usuário personalizado).

Sinto que (B) é a melhor solução (desde que o campo de usuário personalizado não possa ser alterado, exceto por administradores), embora eu não esteja familiarizado com campos personalizados ou se eles são acessíveis via API.

EDIT: Agora me lembro da última vez que olhei para isso: o problema é que os campos de usuário personalizados são editáveis pelo usuário, o que os torna um lugar ruim para armazenar uma referência gerada pelo sistema como essa :confused: