Impossível criar usuário no Discourse a partir do WP com novo formulário de registro

Tenho o Discourse Connect configurado com o WP como a instância principal de registro e login.

Tenho dois formulários de registro de usuário com fluxos diferentes:

  1. Registro padrão da página inicial (este é o antigo e ainda cria um usuário no Discourse)
  2. Registro de usuário usando um fluxo de ferramentas. (este cria o usuário do WP, mas não cria um usuário no Discourse).

Não vejo nenhuma configuração no plugin Discourse que seja específica para um formulário de registro. Quando vou ao usuário, não vejo um nome de usuário do Discourse no WP para o segundo formulário. Link

Tenho duas perguntas:

  1. O que posso estar perdendo aqui? Alguma configuração adicional é necessária para que funcione para um novo formulário?
  2. Como posso criar um usuário no Discourse e conectá-lo ao WordPress para membros que existem no WP?

Correção: Após uma análise mais aprofundada, parece que alguns usuários não estão sendo criados no Discourse, mesmo a partir do primeiro formulário.

1 curtida

Alguém já passou por este problema? Estou realmente preso aqui.

Olá @Himanshu_Singh,

Você poderia me explicar, passo a passo, como um usuário vê:

  1. O que acontece com o seu formulário de “registro padrão”;
  2. O que acontece com o seu formulário de “registro de usuário”.

Por exemplo:

  1. Um usuário vai até o formulário e insere seus dados
  2. Um usuário é redirecionado para o Discourse..

Inclua os passos em que algo que você não quer que aconteça acontece e os passos que você gostaria que acontecessem em vez disso.

2 curtidas

Olá Angus,

No registro padrão,

  1. O usuário acessa o formulário e adiciona nome, e-mail e senha.
  2. Em seguida, o usuário é automaticamente logado.
  3. Então, quando o usuário clica no link da comunidade, ele é automaticamente logado no Discourse (pois o plugin Discourse Connect já fez seu trabalho de criar um novo usuário no Discourse).

Para o segundo formulário,

  1. O usuário adiciona um nome e e-mail.
  2. Nós fornecemos uma senha temporária.
  3. O restante do processo é o mesmo, ou seja, o usuário é logado automaticamente no momento do cadastro.
  4. Mas, neste caso, o usuário não é criado no Discourse.

Não vejo nenhuma configuração no Discourse Connect que seja acionada pela alteração de um formulário de registro. Existe algum hook que precise ser acionado no registro de usuário no WP que não é acionado no caso do segundo formulário?

Na verdade, qual hook no WordPress é usado para criar um usuário no Discourse? Deve haver uma chamada de API para acionar atividade no Discourse. Poderia não disparar por algum motivo?

1 curtida

O que acontece com esses usuários quando eles clicam em “Entrar” no Discourse? Descreva exatamente o que acontece quando eles tentam isso. Eu entendo que o usuário não está aparecendo no seu painel de administração depois de ser criado no WordPress, mas esta é uma pergunta ligeiramente diferente.

1 curtida

Primeiro caso em que o usuário está registrado no WP -
O usuário não precisa clicar em login no Discourse e é conectado automaticamente
ao clicar no seguinte link no WP -

https://community.showprowess.com/session/sso?return_path=/

Se eu apenas usar o link - https://community.showprowess.com/ para ir para o Discourse do WP, o usuário não é conectado e eu tenho que clicar no botão Login no Discourse para conectar o usuário.

Uma vez que o usuário está conectado, ele permanece conectado até que eu desconecte do WP.

Isso cria um problema porque, se o usuário não clicar em /session/sso?return_path=/, o usuário não é conectado. Isso me impede de direcionar o usuário para a página de mensagem privada do WP para o Discourse. (uma funcionalidade que preciso como parte do produto)

Por exemplo, quero enviar uma mensagem privada para o usuário X,
Eu adiciono este link à sua postagem personalizada no WP -
https://community.showprowess.com/new-message?username=x&title=Message%20from%20

Como este é o primeiro link que clico, a caixa de mensagem não abre. Em vez disso, sou conectado ao Discourse. Agora tenho que voltar e clicar no mesmo link (link da mensagem) novamente para que funcione.

Parece com isso -

Isso é irritante para os usuários.

Anteriormente, tudo isso funcionava bem, pois o usuário era conectado automaticamente ao Discourse e o URL https://community.showprowess.com me levava a uma página do Discourse conectada. Talvez o usuário fosse conectado usando cookies do navegador ou algo assim, mas isso não funciona mais.

Quando o usuário não está registrado no Discourse
Isso está acontecendo em ambos os formulários, ou seja, nos novos e antigos.
Neste caso, eu me reconectei e passei pelo processo de integração e desta vez o usuário foi criado no Discourse. Antes disso, o usuário não existia no Discourse (verifiquei a lista de novos usuários na área de administração antes de me reconectar).
Segui os mesmos passos acima - clique no URL /sessions para conectar automaticamente no Discourse. Se eu clicar apenas no domínio da comunidade, ele não conecta.

Infelizmente, não consigo reproduzir o caso em que o usuário não é criado no registro, mas é criado no primeiro login. Isso não acontece em todos os registros de novos usuários, o que é muito estranho.

Espero que isso ajude.

1 curtida

Para ser honesto, estou um pouco confuso sobre como essa descrição do seu problema se relaciona com sua descrição anterior de um problema causado por ter dois formulários de registro diferentes do WordPress. Mas acho que posso ajudá-lo aqui mesmo assim.

Uma coisa a entender é que não há como (e nunca houve) fazer login instantaneamente em dois serviços diferentes em dois domínios diferentes. Sempre que parece que você está logado no serviço A no domínio A e, quando você vai para o serviço B no domínio B, você também está logado, o que realmente aconteceu é que você foi logado no serviço B através do serviço A apenas quando você visita o domínio B e um processo de login é iniciado, não antes.

Outra coisa a entender é que, fora do cenário específico que você está descrevendo, onde você deseja redirecionar uma pessoa para um local específico no aplicativo que requer uma sessão, a maioria dos usuários não se importa, ou não percebe o fato de que às vezes precisam clicar em “login” no serviço B. Na minha experiência trabalhando com clientes em soluções de identidade, os administradores do site geralmente são muito mais sensíveis a isso do que seus usuários.

A maneira como isso funciona não mudou. Sempre que parece que um usuário está “automaticamente” logado, o que realmente está acontecendo é que ele foi redirecionado de volta para o WordPress e, em seguida, redirecionado de volta para o Discourse assim que sua sessão no WordPress foi autenticada. Se eles já estiverem logados no WordPress, parecerá que eles foram “automaticamente” logados no Discourse, pois esse redirecionamento ocorrerá sem que o usuário precise fazer nada.

Uma maneira de acionar o login “automático” e redirecioná-los para um local específico no Discourse após o login é usando o caminho que você já compartilhou

https://community.showprowess.com/session/sso?return_path=[qualquer caminho no Discourse]

Se o usuário já estiver logado no WordPress, mas ainda não estiver logado no Discourse ao usar este URL, é isso que acontecerá:

  1. O Discourse inicia automaticamente o processo de login do DiscourseConnect
  2. O navegador do usuário é redirecionado para o WordPress
  3. O usuário já está logado, portanto, o usuário é automaticamente redirecionado de volta para o Discourse
  4. Se houvesse um valor return_path no URL usado em 1, o usuário será redirecionado para lá

Do ponto de vista do usuário, ele verá seu navegador carregar brevemente, mas efetivamente estará “automaticamente” logado no Discourse e redirecionado para uma parte específica do aplicativo.

Observe que você pode realmente tornar o return_path qualquer URL, até mesmo um domínio separado, se você definir a configuração do site discourse connect permite todos os return paths como true.

2 curtidas

Obrigado! Isso é útil para resolver o problema de registrar automaticamente o usuário do WP no Discourse. Posso usar o return_path para direcionar o usuário para qualquer página no Discourse. Isso resolve o problema de direcionar o usuário para a página de mensagens.

No entanto, ainda não tenho certeza por que, em alguns casos, o usuário não é criado no Discourse quando o usuário é criado no WordPress. Você sabe quando o usuário é realmente criado no Discourse a partir do SSO?

  1. É quando um usuário é criado no WP?
  2. É quando um novo usuário do WordPress tenta acessar o Discourse e, em seguida, o usuário é criado, logado e direcionado para o Discourse?

Qual hook usamos no WP para criar um usuário no Discourse?

Estou tentando entender qual caso extremo não criaria um usuário no Discourse quando um usuário é criado no WP.

Caso de uso prático:
Dou as boas-vindas a novos usuários toda semana com uma mensagem. Na semana passada, 30 usuários entraram no WP e 16 foram criados no Discourse. Quando quero marcá-los em uma mensagem de boas-vindas, não consigo marcá-los todos - o que é muito estranho para mim.

Obrigado por ajudar, Angus. Eu aprecio isso.

1 curtida

Com as configurações padrão, os usuários são criados no Discourse na primeira vez que o usuário faz login no Discourse usando o DiscourseConnect. Até esse momento, nenhum usuário existe no Discourse.

O plugin WP Discourse também tem uma configuração “Criar ou Sincronizar Usuários do Discourse no Login” que, quando habilitada, criará um usuário via API do Discourse após o usuário se registrar no WordPress. Esta configuração usa a ação wp_login do WordPress, portanto, seu processo de registro de usuário precisa acionar essa ação para que este recurso funcione.

2 curtidas

Agora tudo faz sentido. Obrigado, Angus.

Tenho a configuração “Criar ou Sincronizar Usuários do Discourse no Login” marcada. O usuário não está sendo criado no Discourse porque alguns usuários se registram no WP, mas não visitam a comunidade no primeiro login. Eles podem voltar e fazer login e, em seguida, clicar no URL da comunidade e, então, o usuário é criado.

O login automático atual após o registro no WP não usa WP_login

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Edite conforme necessário
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit(); 
  }
}

Eu preferiria criar o usuário no Discourse no registro do WP.
Tenho ganchos personalizados no formulário de registro de usuário que podem executar a API. Existe algum código que eu possa adicionar ao gancho personalizado para criar um usuário no Discourse via API?

Esta é a parte que eu não sei como fazer, ou seja, acionar wp_login de um gancho personalizado.

2 curtidas

Apenas adicione um gatilho de ação ao seu código.

do_action( 'wp_login' );
2 curtidas

Então eu fiz exatamente o que você me disse para fazer.

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Edite conforme necessário
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
   do_action( 'wp_login' );

//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit(); 
  }
}

Mas recebo o seguinte erro:
Mensagem: Uncaught ArgumentCountError: Too few arguments to function WPDiscourse\WordPressEmailVerification\WordPressEmailVerification::verify_email_after_login(), 1 passed in /home/customer/www/[domain.com/public_html/wp-includes/class-wp-hook.php on line 307 and exactly 2 expected in /home/customer/www/[domain.com/public_html/wp-content/plugins/wp-discourse/lib/wordpress-email-verification.php:128**

Eu tenho outro código que ignora a verificação de e-mail

add_filter( 'discourse_email_verification', 'disable_discourse_email_verification_prowess');
function disable_discourse_email_verification_prowess() {
  wp_mail( 'himanshu@eshowprowess.com', 'User verified', 'Status must change' ); 
   
    return false;
}

Isso é um problema de sequência de código ou preciso passar algum parâmetro para a ação wp_login?

Editar: O usuário foi criado no WP e estava logado, mas o usuário não foi criado no Discourse.

1 curtida

Sugiro que você pesquise sobre a ação. A documentação do WP é um recurso melhor do que eu sobre isso. Infelizmente, não conseguirei descobrir a melhor forma de integrar seu código de login WP personalizado aqui. Em relação ao problema que você está tendo, acho que chegamos ao fundo dele.

3 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.