Impossible de créer un utilisateur dans Discourse depuis WP avec le nouveau formulaire d'inscription

J’ai Discourse Connect configuré avec WP comme instance principale d’enregistrement et de connexion.

J’ai deux formulaires d’inscription d’utilisateurs avec des flux différents :

  1. Inscription standard depuis la page d’accueil (c’est l’ancien et il crée toujours un utilisateur dans Discourse)
  2. Inscription utilisateur en utilisant un flux d’outils. (celui-ci crée l’utilisateur WP mais ne crée pas d’utilisateur dans Discourse).

Je ne vois aucun paramètre dans le plugin Discourse spécifique à un formulaire d’inscription. Quand je vais sur l’utilisateur, je ne vois pas de nom d’utilisateur Discourse dans WP pour le deuxième formulaire. Lien

J’ai deux questions :

  1. Qu’est-ce que je pourrais manquer ici ? Un setup supplémentaire est-il nécessaire pour que cela fonctionne pour un nouveau formulaire ?
  2. Comment puis-je créer un utilisateur dans Discourse et le connecter à WordPress pour les membres qui existent dans WP ?

Correction : Après analyse plus approfondie, il semble que certains utilisateurs ne soient pas non plus créés dans Discourse à partir du premier formulaire.

1 « J'aime »

Quelqu’un a-t-il déjà rencontré ce problème ? Je suis vraiment bloqué ici.

Salut @Himanshu_Singh,

Pourriez-vous m’expliquer, étape par étape, comment un utilisateur le voit :

  1. Que se passe-t-il avec votre formulaire « inscription standard » ;
  2. Que se passe-t-il avec votre formulaire « inscription utilisateur ».

Par exemple :

  1. Un utilisateur accède au formulaire et saisit ses informations
  2. Un utilisateur est redirigé vers Discourse…

Incluez les étapes où quelque chose que vous ne voulez pas qu’il se passe se produit et les étapes que vous aimeriez qu’il se produise à la place.

2 « J'aime »

Salut Angus,

Dans l’inscription standard,

  1. L’utilisateur accède au formulaire et ajoute son nom, son e-mail et son mot de passe.
  2. Ensuite, l’utilisateur est automatiquement connecté.
  3. Puis, lorsque l’utilisateur clique sur le lien de la communauté, il est automatiquement connecté à Discourse (car le plugin Discourse Connect a déjà créé un nouvel utilisateur dans Discourse).

Pour le deuxième formulaire,

  1. L’utilisateur ajoute un nom et un e-mail.
  2. Nous lui fournissons un mot de passe temporaire.
  3. Le reste du processus est le même, c’est-à-dire que l’utilisateur est automatiquement connecté lors de l’inscription.
  4. Mais dans ce cas, l’utilisateur n’est pas créé dans Discourse.

Je ne vois aucun réglage dans Discourse Connect qui soit déclenché par la modification d’un formulaire d’inscription. Y a-t-il un hook qui doit être déclenché lors de l’inscription d’un utilisateur dans WP qui n’est pas déclenché dans le cas du deuxième formulaire ?

En fait, quel hook dans WordPress est utilisé pour créer un utilisateur dans Discourse ? Il doit y avoir un appel API pour déclencher une activité dans Discourse. Ne pourrait-il pas se déclencher pour une raison quelconque ?

1 « J'aime »

Que se passe-t-il pour ces utilisateurs lorsqu’ils cliquent sur « Se connecter » dans Discourse ? Décrivez exactement ce qui se passe lorsqu’ils tentent cela. Je comprends que l’utilisateur n’apparaît pas dans votre panneau d’administration après sa création dans WordPress, mais il s’agit d’une question légèrement différente.

1 « J'aime »

Premier cas où l’utilisateur est enregistré dans WP -
L’utilisateur n’a pas à cliquer sur connexion dans Discourse et il est automatiquement connecté en cliquant sur le lien suivant dans WP -

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

Si j’utilise simplement le lien - https://community.showprowess.com/ pour aller à Discourse depuis WP, l’utilisateur n’est pas connecté et je dois cliquer sur le bouton Connexion sur Discourse pour le connecter.

Une fois que l’utilisateur est connecté, il reste connecté jusqu’à ce que je me déconnecte de WP.

Cela crée un problème car si l’utilisateur ne clique pas sur /session/sso?return_path=/ , l’utilisateur n’est pas connecté. Cela m’empêche de diriger l’utilisateur vers la page de message privé depuis WP vers Discourse. (une fonctionnalité dont j’ai besoin dans le cadre du produit)

Par exemple, je veux envoyer un message privé à l’utilisateur X,
J’ajoute ce lien à son article personnalisé sur WP -
https://community.showprowess.com/new-message?username=x&title=Message%20from%20

Comme c’est le premier lien sur lequel je clique, la boîte de message ne s’ouvre pas. Au lieu de cela, je suis connecté à Discourse. Maintenant, je dois revenir en arrière, puis cliquer à nouveau sur le même lien (lien de message) pour qu’il fonctionne.

Cela ressemble à ceci -

C’est ennuyeux pour les utilisateurs.

Auparavant, tout cela fonctionnait très bien car l’utilisateur était automatiquement connecté à Discourse et l’URL https://community.showprowess.com me menait à une page Discourse connectée. Peut-être que l’utilisateur était connecté à l’aide de cookies de navigateur ou autre, mais cela ne fonctionne plus.

Quand l’utilisateur n’est pas enregistré sur Discourse
Cela se produit sur les deux formulaires, c’est-à-dire les anciens et les nouveaux.
Dans ce cas, je me suis reconnecté et j’ai suivi le processus d’intégration et cette fois, l’utilisateur a été créé dans Discourse. Avant cela, l’utilisateur n’existait pas dans Discourse (j’ai vérifié la liste des nouveaux utilisateurs dans la zone d’administration avant de me reconnecter).
J’ai suivi les mêmes étapes que ci-dessus - cliquer sur l’URL /sessions pour se connecter automatiquement à Discourse. Si je clique simplement sur le domaine communautaire, cela ne me connecte pas.

Malheureusement, je ne parviens pas à reproduire le cas où l’utilisateur n’est pas créé à l’enregistrement mais est créé à la première connexion. Cela ne se produit pas à chaque nouvel enregistrement d’utilisateur, ce qui est très étrange.

J’espère que cela vous aidera.

1 « J'aime »

Pour être honnête, je suis un peu confus quant à la façon dont cette description de votre problème est liée à votre description précédente d’un problème causé par deux formulaires d’inscription Wordpress différents. Mais je pense que je peux vous aider néanmoins.

Une chose à comprendre est qu’il n’y a aucun moyen (et il n’y en a jamais eu) d’être instantanément connecté à deux services différents sur deux domaines différents. Chaque fois qu’il semble que vous êtes connecté au service A sur le domaine A et que lorsque vous allez au service B sur le domaine B, vous êtes également connecté, ce qui s’est réellement passé, c’est que vous avez été connecté au service B via le service A une fois que vous visitez le domaine B et qu’un processus de connexion est initié, pas avant.

Une autre chose à comprendre est qu’en dehors du scénario spécifique que vous décrivez où vous souhaitez rediriger une personne vers un endroit spécifique de l’application qui nécessite une session, la plupart des utilisateurs ne se soucient pas, ou ne remarquent pas le fait qu’ils doivent parfois cliquer sur « se connecter » sur le service B. D’après mon expérience de travail avec des clients sur des solutions d’identité, les administrateurs de sites sont généralement beaucoup plus sensibles à cela que leurs utilisateurs.

La façon dont cela fonctionne n’a pas changé. Chaque fois qu’il semble qu’un utilisateur est « automatiquement » connecté, ce qui se passe réellement, c’est qu’il a été redirigé vers Wordpress, puis redirigé vers Discourse une fois que sa session dans Wordpress a été authentifiée. S’il est déjà connecté dans Wordpress, il semblera qu’il a été « automatiquement » connecté à Discourse car cette redirection se produira sans que l’utilisateur n’ait à faire quoi que ce soit.

Une façon de déclencher la connexion « automatique » et de les rediriger vers un endroit spécifique dans Discourse après la connexion est d’utiliser le chemin que vous avez déjà partagé

https://community.showprowess.com/session/sso?return_path=[any path in Discourse]

Si l’utilisateur est déjà connecté à Wordpress, mais pas encore connecté à Discourse lorsqu’il utilise cette URL, voici ce qui se passera :

  1. Discourse démarre automatiquement le processus de connexion DiscourseConnect
  2. Le navigateur de l’utilisateur est redirigé vers Wordpress
  3. L’utilisateur est déjà connecté, donc l’utilisateur est automatiquement redirigé vers Discourse
  4. S’il y avait une valeur return_path dans l’URL utilisée dans 1, l’utilisateur y sera redirigé

Du point de vue de l’utilisateur, il verra son navigateur se charger brièvement, mais il sera effectivement connecté « automatiquement » à Discourse et redirigé vers une partie spécifique de l’application.

Notez que vous pouvez en fait faire de return_path n’importe quelle URL, même un domaine séparé, si vous définissez le paramètre du site discourse connect allows all return paths sur true.

2 « J'aime »

Merci ! C’est utile pour résoudre le problème de connexion automatique de l’utilisateur de WP à Discourse. Je peux utiliser le return_path pour diriger l’utilisateur vers n’importe quelle page de Discourse. Cela résout le problème de redirection de l’utilisateur vers la page de message.

Cependant, je ne suis toujours pas sûr de pourquoi, dans certains cas, l’utilisateur n’est pas créé dans Discourse lorsque l’utilisateur est créé dans WordPress. Savez-vous quand l’utilisateur est réellement créé dans Discourse à partir du SSO ?

  1. Est-ce lorsqu’un utilisateur est créé dans WP ?
  2. Est-ce lorsqu’un nouvel utilisateur WordPress essaie d’accéder à Discourse et que l’utilisateur est alors créé, connecté et redirigé vers Discourse ?

Quel hook utilisons-nous dans WP pour créer un utilisateur dans Discourse ?

J’essaie de comprendre quel cas limite ne créerait pas un utilisateur dans Discourse lorsqu’un utilisateur est créé dans WP.

Cas d’utilisation pratique :
Je souhaite la bienvenue aux nouveaux utilisateurs chaque semaine avec un message. La semaine dernière, 30 utilisateurs ont rejoint WP et 16 ont été créés dans Discourse. Lorsque je veux les identifier dans un message de bienvenue, je ne peux pas tous les identifier - ce qui est très étrange pour moi.

Merci de votre aide Angus. J’apprécie.

1 « J'aime »

Avec les paramètres par défaut, les utilisateurs sont créés dans Discourse la première fois que l’utilisateur se connecte à Discourse en utilisant DiscourseConnect. Jusqu’à ce moment, aucun utilisateur n’existe dans Discourse.

Le plugin WP Discourse a également un paramètre « Créer ou synchroniser les utilisateurs Discourse à la connexion » qui, lorsqu’il est activé, créera un utilisateur via l’API Discourse après que l’utilisateur s’est enregistré dans Wordpress. Ce paramètre utilise l’action wp wp_login, donc votre processus d’enregistrement d’utilisateur doit déclencher cette action pour que cette fonctionnalité fonctionne.

2 « J'aime »

Tout s’explique maintenant. Merci, Angus.

J’ai coché le paramètre « Créer ou synchroniser les utilisateurs Discourse lors de la connexion ». L’utilisateur n’est pas créé dans Discourse car certains utilisateurs s’inscrivent sur WP mais ne visitent pas la communauté lors de leur première connexion. Ils pourraient revenir, se connecter, puis cliquer sur l’URL de la communauté et c’est là que l’utilisateur est créé.

La connexion automatique actuelle après l’inscription sur WP n’utilise pas WP_login

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Modifier si nécessaire
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit(); 
  }
}

Je préférerais créer l’utilisateur dans Discourse lors de l’inscription sur WP.
J’ai des hooks personnalisés sur le formulaire d’inscription des utilisateurs qui peuvent exécuter l’API. Existe-t-il un code que je peux ajouter au hook personnalisé pour créer un utilisateur dans Discourse via l’API ?

C’est la partie que je ne sais pas comment faire, c’est-à-dire déclencher wp_login à partir d’un hook personnalisé.

2 « J'aime »

Ajoutez simplement un déclencheur d’action à votre code.

do_action( 'wp_login' );
2 « J'aime »

J’ai fait exactement ce que vous m’avez dit de faire.

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );
    
function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Modifier au besoin
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
   do_action( 'wp_login' );

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

Mais j’obtiens l’erreur suivante :
Message : Uncaught ArgumentCountError : Trop peu d’arguments pour la fonction WPDiscourse\WordPressEmailVerification\WordPressEmailVerification::verify_email_after_login(), 1 passé dans /home/customer/www/domain.com/public_html/wp-includes/class-wp-hook.php on line 307 et exactement 2 attendus dans /home/customer/www/domain.com/public_html/wp-content/plugins/wp-discourse/lib/wordpress-email-verification.php:128

J’ai un autre code qui contourne la vérification par 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;
}

Est-ce un problème de séquence de code ou dois-je passer un paramètre à l’action wp_login ?

Modification : l’utilisateur a été créé dans WP et était connecté, mais l’utilisateur n’a pas été créé dans Discourse.

1 « J'aime »

Je vous suggère de faire quelques recherches sur l’action. La documentation de WP est une meilleure ressource que moi à ce sujet. Malheureusement, je ne pourrai pas trouver la meilleure façon d’intégrer votre code de connexion WP personnalisé ici. En ce qui concerne le problème que vous rencontrez, je pense que nous en sommes venus à bout.

3 « J'aime »

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