Sincronização bidirecional entre nome de usuário do WP Discourse e nome de usuário do Discourse?

Recentemente, minha equipe e eu temos trabalhado em um recurso que permite que o nome de usuário do Discourse de um usuário seja editado a partir do WordPress com o plugin WP Discourse instalado e nosso site WordPress configurado como provedor SSO para o Discourse. Atualmente, tivemos algum sucesso usando a API do Discourse, onde temos um campo meta personalizado no WordPress que, quando atualizado, chama a instância do Discourse de nosso site com uma solicitação PUT para atualizar o nome de usuário do usuário (semelhante a uma solução proposta aqui: How does one change a username via the API?)

No entanto, existe uma opção existente no WP Discourse, como mostrado aqui:

que permite aos usuários do WordPress editar seu “Nome de usuário do Discourse” através deste campo em sua página de perfil do WordPress:

mas este campo é usado apenas para publicar posts (do WP para o Discourse) e não atualiza realmente o nome de usuário do usuário no Discourse. Ele sincroniza quando um usuário muda seu nome de usuário no Discourse, mas não sincroniza do WordPress para o Discourse quando alterado.

Minha pergunta é, esse tipo de sincronização bidirecional será implementado em algum momento? Por que existe a opção de permitir que os usuários alterem este campo de nome de usuário se ele não sincroniza do WordPress para o Discourse? Minha equipe também estaria interessada em contribuir com este recurso se não for algo que já esteja em andamento. Nosso site precisa dessa funcionalidade e imaginamos que seria útil para todos os sites WP Discourse também. Por favor, me informe sobre isso!

@angus @simon como vocês dois estão fortemente envolvidos no WP Discourse e nos ajudaram com nossos problemas de SSO, acho que devo direcionar esta pergunta a vocês!

3 curtidas

Movi isto para a categoria Support > WordPress, porque a categoria Feature destina-se a funcionalidades do Discourse.

O campo Discourse Username Editable no plugin WordPress pode ter um nome inadequado. A cópia da configuração definitivamente precisa ser atualizada para deixar claro para que a configuração se destina. Quando a configuração Discourse Username Editable está ativada, os usuários no site WordPress podem definir seu nome de usuário do Discourse em sua página de perfil do WordPress. Se essa configuração não estiver ativada, apenas um administrador no site WordPress pode definir o nome de usuário do Discourse do usuário. O nome de usuário do Discourse é usado apenas pelo plugin para publicar posts do WordPress no Discourse.

Quando o DiscourseConnect é usado entre WordPress e Discourse, o nome de usuário do Discourse do usuário é inicialmente definido a partir de seu nome de usuário do WordPress. Se a configuração auth_overrides_username estiver ativada no site Discourse, o nome de usuário no Discourse só poderá ser definido a partir do WordPress. Se a configuração auth overrides username não estiver ativada no Discourse, os usuários poderiam editar seu nome de usuário no Discourse, de modo que os nomes de usuário poderiam ficar dessincronizados entre os dois sistemas.

Em termos do campo Discourse Username, idealmente, este campo seria sempre preenchido em segundo plano com base no nome de usuário do Discourse. Faz um tempo desde que olhei o código relacionado, mas acredito que o campo Discourse Username é preenchido automaticamente se o site WordPress for usado como provedor SSO para o Discourse e a opção “Criar ou Sincronizar Usuários do Discourse no Login” estiver ativada na aba de opções do Provedor DiscourseConnect no WordPress. O campo Discourse Username também é definido automaticamente se o Discourse for usado como provedor SSO para o WordPress (com a configuração do Cliente DiscourseConnect).

Idealmente, o campo Discourse Username seria sempre definido automaticamente quando o WordPress for o provedor SSO para o Discourse, independentemente de a opção “Criar ou Sincronizar Usuários do Discourse no Login” estar ativada ou não no Discourse. Não acho que nada possa ser feito para o caso em que o DiscourseConnect não está sendo usado entre os dois sites, mas @angus pode ter ideias sobre isso.

Por padrão, o WordPress não permite que os usuários alterem seus nomes de usuário, então esta não é uma questão sobre a qual tivemos muitas perguntas. Se você quiser garantir que os nomes de usuário sejam mantidos em sincronia entre WordPress e Discourse, certifique-se de ativar a configuração auth_overrides_username no Discourse. Você também pode querer ativar a opção “Criar ou Sincronizar Usuários do Discourse no Login” no WordPress. Com essa opção ativada, os usuários serão atualizados no Discourse a cada vez que fizerem login em seu site WordPress. Se essa opção não estiver ativada, os usuários só serão atualizados no Discourse quando fizerem logout do Discourse e, em seguida, fizerem login novamente com o DiscourseConnect.

3 curtidas

Obrigado pela resposta @simon e pela explicação do recurso existente.

Nosso site pode ser um caso um pouco especial, pois não queremos que o nome de usuário do WordPress do usuário seja sincronizado com o Discourse precisamente porque o WordPress não permite que os usuários alterem seus nomes de usuário por padrão. E não queremos instalar um plugin que adicione essa funcionalidade de edição de nome de usuário do WP devido à instabilidade que isso poderia criar.

Mas como os nomes de usuário são editáveis no Discourse, acho que faria sentido estender essa funcionalidade para o WordPress por meio do plugin WP Discourse. Esse campo parece o local perfeito para isso, mas entendo que isso poderia entrar em conflito com o nome de usuário do WP, já que ele nunca mudaria por padrão. Então, entendo que isso não é algo que você quer que contribuamos para o plugin?

1 curtida

Além disso, permitir que os usuários editem seu nome de usuário no fórum é um requisito importante para nós. Já temos o Discourse configurado para permitir isso, mas a maioria de nossos usuários não altera seu nome de usuário do Discourse porque ele fica oculto nas configurações do Discourse. Queremos que ele esteja em destaque na página de perfil deles em nosso site WordPress, ao lado de outras informações como nome, avatar, etc.

1 curtida

Algumas perguntas e algumas notas

No entanto, eles serão os mesmos em novos cadastros, já que você está usando o DiscourseConnect. Presumo que você esteja bem com isso e esteja apenas preocupado com a sincronização em si (ou seja, após a criação da conta)?

Como você está prevendo o caso em que um usuário cria uma conta no Wordpress e ainda não acessou o Discourse? Nenhuma conta do Discourse existirá. Nesse caso, o campo Nome de Usuário do Discourse não seria editável?

Observe que o webhook “Atualizar Dados do Usuário” (veja “Webhooks” nas configurações do WP Discourse) atualizará o Nome de Usuário do Discourse no Wordpress quando ele for alterado no Discourse. Essa é uma parte da sincronização bidirecional que você está prevendo.

Portanto, especificamente o que você deseja é apenas que o plugin WP Discourse atualize o nome de usuário do Discourse do usuário quando ele for alterado, sim?

Agora, esse campo é usado por pessoas diferentes para propósitos diferentes. Algumas pessoas querem poder editar esse campo sem atualizar o nome de usuário do usuário do Discourse associado à conta que eles usam com o DiscourseConnect.

No entanto, há uma solução relativamente simples. Poderíamos apenas adicionar uma ação em algum lugar perto de aqui para que você possa usar uma solicitação PUT para o Discourse para atualizar o nome de usuário no Discourse, ou seja, como você está fazendo agora. Eu apenas adicionaria que a maneira fácil de fazer isso é usar o método abstraído discourse_request nas Utilidades do Plugin WP, ou seja,

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;
$path = ''
$args =  array(
);
$response = DiscourseUtilities::discourse_request( $path, $args );

Usando o Webhook e o callback de ação, você teria uma sincronização bidirecional da maneira que está prevendo, assumindo que você considerou as duas perguntas que levantei acima.

Ficarei feliz em revisar e mesclar um PR com uma ação adicional nesse sentido.

4 curtidas

Na verdade, estamos substituindo esse comportamento com o hook de filtro wpdc_sso_params porque nosso sistema SSO integra o Firebase e o nome de usuário padrão do WP de todos é seu UID do Firebase, então estamos mudando o padrão do Discourse para ser memberXXX (com XXX sendo um número). Na verdade, queremos mudar esse padrão para ser PrimeiroNome_Sobrenome do usuário em algum momento também. Mas sim, nossa principal preocupação é que os usuários possam alterar facilmente seu nome de usuário por meio de sua página de perfil em nosso site Wordpress.

Neste caso, estou pensando que podemos armazenar o campo de nome de usuário e sincronizá-lo quando a conta for criada (via hook de filtro wpdc_sso_params no primeiro SSO), ou poderíamos forçar a criação de uma conta do Discourse para cada membro quando eles se inscreverem em nosso site Wordpress via API do Discourse. A segunda opção seria provavelmente mais vantajosa porque saberíamos que todos têm uma conta do Discourse e, portanto, haveria menos casos especiais de alguns usuários tendo contas e outros não. Mas estamos realmente buscando uma experiência perfeita, então queremos que este nome de usuário seja o que o usuário pensa como seu nome de usuário para toda a nossa plataforma. Queremos que ele seja sempre editável e, no futuro, provavelmente o usaremos para mais do que apenas o Discourse (ou seja, em leaderboards, etc.).

Sim, é exatamente isso que precisamos!

Entendido! Obrigado por essa direção, minha equipe e eu trabalharemos para testar isso com nossa implementação primeiro e em breve faremos um PR!

2 curtidas