Eu quero que apenas pessoas registradas no meu site externo criem uma conta no meu fórum Discourse. Acredito que não posso usar a API SSO, pois meu site não possui autenticação; há apenas um registro em banco de dados SQL.
É possível implementar uma condição no cadastro para permitir que apenas pessoas registradas no meu banco de dados SQL (meu site) se cadastrem?
Não sou especialista no Discourse, mas existem várias maneiras de lidar com isso, e aqui está uma que eu esperaria que pudesse funcionar e tentaria explorar:
Exigir aprovação para novos usuários do Discourse
Desenvolver um script no seu site remoto ou em um ambiente serverless que consulte seu banco de dados para uma pessoa e, em seguida, chame a API do Discourse para aprovar ou recusar o novo usuário
Fazer com que o Discourse realize uma chamada de webhook para o script quando houver um novo usuário
Personalizar a redação do seu Discourse para descrever melhor aos seus usuários o que está acontecendo
Basicamente, o Discourse possui webhooks e API robustos, então você pode usá-los enquanto escreve seu script personalizado remotamente, na linguagem com a qual se sentir mais confortável.
Se você estiver disposto a escrever um plugin do Discourse em Ruby, isso também funcionaria, mas, pessoalmente, não estou, então acharia essa abordagem mais fácil.
Uma maneira de fazer isso seria ativar as configurações do site apenas por convite e aprovação necessária de usuários. Com essas configurações ativadas, apenas usuários convidados poderão criar contas no seu site. Os convites só poderão ser enviados por usuários da equipe, pois a configuração do site aprovação necessária de usuários impede que usuários não da equipe enviem convites.
Você pode, então, extrair endereços de e-mail do seu banco de dados SQL e adicioná-los a um arquivo CSV. Esse arquivo pode ser usado para enviar convites em massa, seguindo as etapas descritas aqui: Envio de Convites de Usuário em Massa.
Ao pesquisar o código do Discourse no GitHub, encontrei uma ação “approve_user”, por exemplo: put "/review/#{reviewable.id}/perform/approve_user.json". Parece que você pode precisar obter os reviewables primeiro para conseguir o ID do reviewable necessário.