Estamos usando OpenID para login, e parece que essa opção só está disponível ao usar DiscourseConnect. Existe outra maneira? Preenchê-los manualmente é bem chato.
Nós permitimos que os usuários editem seus endereços de e-mail (distinto do SSO) nos sites do Discourse, mas o ID do usuário é garantido como o mesmo.
Minha resposta inicial (as perguntas ainda estão pendentes)
Ei @mattdm, você poderia esclarecer algumas coisas:
O e-mail de um usuário pode ser diferente entre suas contas no WordPress e no Discourse?
O que você quer dizer com “o ID do usuário é garantido como o mesmo”? De qual ID de usuário estamos falando?
Ah, desculpe — eu tinha certeza de que já tinha respondido a isso antes, mas acho que… não? Talvez eu só tenha pensado nisso! De qualquer forma:
O e-mail é inicialmente sincronizado do SSO tanto para o WordPress quanto para o Discourse. No entanto, devido à demanda popular, permitimos que as pessoas alterem esse e-mail no Discourse. (Acontece de ser frequente querer que as notificações do Discourse vão para um local diferente do e-mail associado diretamente ao login.) Também é possível alterar o endereço de e-mail no WordPress, mas não conheço ninguém que faça isso, ou mesmo se o e-mail de saída nessa instância funciona.
Por “ID de usuário”, eu quis dizer “nome de usuário”. O nome de usuário é sempre[1] obtido do SSO tanto para o Discourse quanto para o WordPress e não pode ser alterado pelo usuário em nenhum dos casos. Por alguma razão desconhecida para mim, mas que provavelmente fez sentido na época, este é o nickname no nosso lado do SSO; isso é mapeado para oauth2 json username path.
Na verdade, acontece que existem poucas contas como a minha que foram configuradas antes de termos o SSO, e elas estão erradas — eu sou “Matthew Miller” em vez de mattdm. Mas poderíamos corrigir isso. ↩︎
Haveria um subconjunto de seus usuários com e-mails diferentes no WordPress e no Discourse.
Seu nome de usuário é garantido como o mesmo, pois é fornecido pelo seu provedor de identidade para WordPress e Discourse.
Se fôssemos desacoplar o webhook de usuário WP Discourse da funcionalidade DiscourseConnect (possível), a correspondência de usuário ocorreria com base no e-mail, não no nome de usuário. Sua situação é um tanto específica para sua configuração de identidade.
Acho que este caso é melhor tratado por meio de código personalizado no seu WordPress. O que você quer é algo como isto:
Basicamente, basta atribuir o campo meta discourse_username como o nome de usuário do WP após o login, pois eles são garantidos como iguais. Observe que “user_login” é o que o “nome de usuário” às vezes é chamado no código do WordPress.
Em algum momento, mudamos para que os endereços de e-mail sejam sincronizados à força do nosso SSO (oauth2). Portanto, deveríamos ser capazes de fazer a correspondência dessa maneira. (E, mesmo que por algum motivo haja uma incompatibilidade, não deve haver um caso em que um e-mail pertença a alguém mais, então, no pior dos casos, isso falharia, certo?)
Alguma chance de fazer o webhook de usuário do WP Discourse funcionar sem problemas?
Caso contrário… Eu não sou um especialista em WP, e nosso WP é hospedado, então não tenho certeza se temos uma opção fácil de personalizar o plugin.
Apenas uma observação de que ele funciona atualmente. Você está pedindo um novo recurso
Além disso, você está pedindo um novo recurso que precisa ser considerado com bastante cuidado. Sei que disse que era possível há alguns anos, no entanto, atualmente estou um pouco receoso de fazer isso como um recurso principal do plugin, pois tal recurso teria que assumir que os endereços de e-mail são devidamente validados no WordPress, o que nem sempre é uma suposição segura.
Isso (validação de e-mail do WordPress) é responsabilidade do administrador do site, no entanto, um princípio de desenvolvimento de código aberto é evitar a criação de algo que cause maus resultados em um subconjunto (mesmo um pequeno subconjunto) de casos, assumindo que você não tem controle sobre o ambiente. Esse problema ainda existe, mas é mitigado, quando se limita apenas ao DiscourseConnect.
Vou considerar mais atentamente e voltarei a você esta semana.
Se a correspondência de e-mail for muito complicada, sinto que “Nomes de usuário do Discourse sempre correspondem ao WordPress (e vice-versa)” não pode ser tão incomum.
Mesmo que alguém não tenha um sistema SSO que assuma um nome de usuário exclusivo, certamente deve haver muitos sites menores com, digamos, dezenas de usuários do WordPress onde isso é verdade por convenção.
Existe uma espécie de solução existente para isso. O Discourse pode ser configurado para ser o provedor do DiscourseConnect para o WordPress (o oposto da configuração usual). É fácil de configurar. Quando habilitado, há uma configuração opcional que permite que contas do WordPress/Discourse sejam sincronizadas com base no endereço de e-mail do usuário.
Há até um link adicionado à página de perfil do usuário:
Testando agora, clicar no link na página de perfil não está preenchendo o campo Nome de Usuário do Discourse. Deveria. Clicar no link “Entrar com Discourse” que pode ser adicionado à página de login faz com que o campo Nome de Usuário do Discourse seja atualizado automaticamente.
Acho que o objetivo da sincronização de contas é atualizar o campo Nome de Usuário do Discourse de forma segura, então provavelmente vale a pena investigar o que está acontecendo com isso. Também parece haver um problema em que contas que têm um endereço de e-mail “não verificado” no WordPress podem sincronizar suas contas com o Discourse. Isso provavelmente não deveria ser permitido por padrão.
Para o seu caso, você pode não querer permitir que os usuários façam login no WordPress via Discourse. Deve ser possível apenas usar o link na página de perfil para permitir que os usuários sincronizem suas contas para que o campo Nome de Usuário do Discourse seja preenchido automaticamente. Você não deveria ter que habilitar o login no WordPress via Discourse para que isso funcione.
Uma desvantagem possível dessa abordagem é que os usuários terão que iniciá-la. Não forneceria um botão que os administradores pudessem clicar para obter o nome de usuário do Discourse de um usuário.
Isso parece bobo. Nós temos um SSO centralizado. Não deveríamos ter que configurar alguns de nossos serviços para usar outros serviços aleatórios como provedor de autenticação apenas para fazê-los funcionar juntos. Isso é um caminho para a loucura.
Não se deixe enganar pelo nome (DiscourseConnect). Se o recurso que descrevi estivesse funcionando como deveria, seria apenas uma maneira de um usuário do WordPress confirmar que tinha uma conta no Discourse com um endereço de e-mail correspondente e obter seu nome de usuário do Discourse preenchido automaticamente no WordPress. Isso não afetaria o sistema de autenticação do seu site.
Nunca haverá um mecanismo de identidade de correspondência de nome de usuário do Wordpress para nome de usuário do Discourse no plugin principal, mesmo por meio de uma configuração. A única possibilidade neste contexto é a correspondência de e-mail. Decidi adicionar a correspondência de e-mail como um mecanismo de fallback para o webhook do usuário. Estará na próxima versão, que virá em poucas semanas.
Apenas para fechar o ciclo sobre isso, a versão mais recente do plugin 2.5.4 incluiu várias atualizações para Webhooks, incluindo a remoção do requisito do DiscourseConnect para a configuração “Corresponder usuários por e-mail”. Veja mais