tl;dr - Lorsqu’un nouvel utilisateur WordPress passe une commande ou s’inscrit, il semble écraser ou se connecter d’une manière ou d’une autre à des utilisateurs existants dans Discourse. Je ne sais pas comment résoudre ce problème.
Contexte :
Nous utilisons le plugin wp-discourse pour l’authentification unique (SSO), où WordPress est le fournisseur DiscourseConnect.
Nous avons lancé notre communauté Discourse, hébergée sur une instance Digital Ocean.
Lorsque nous avons lancé la communauté Discourse et l’avons connectée au SSO avec le plugin wp-discourse, nous hébergions WordPress sur AWS Lightsail, en utilisant Plesk comme panneau de contrôle.
Nous avons migré vers l’hébergement géré WordPress de Nexcess, plus tôt cette année, et le connecteur Discourse a semblé rester intact.
Nous n’avons pas migré nos utilisateurs lorsque nous sommes passés à notre nouvelle installation WordPress. Ils ont été exportés, et nous prévoyons de les importer bientôt.
Notre site WordPress a été fermé pendant un certain temps, car nous apportions des ajustements majeurs.
Au cours des derniers mois, nous avons eu beaucoup de personnes passant des commandes sur WordPress (WooCommerce), et nous avons remarqué quelque chose de particulier… que lorsque vous regardez un compte utilisateur dans WordPress et le champ Nom d’utilisateur Discourse, leur nom d’utilisateur correspond à celui d’utilisateurs existants de Discourse. D’une manière ou d’une autre, notre connexion à Discourse semble être déréglée. Un utilisateur vient de s’inscrire aujourd’hui et son Nom d’utilisateur Discourse est tennisdpm, que vous pouvez voir comme un utilisateur existant, qui s’est inscrit en 2020.
Nous allons bientôt migrer (ajouter) tous les utilisateurs qui avaient des comptes sur notre ancienne instance WordPress, et les ajouter à notre nouvelle instance, mais étant donné qu’il semble y avoir un conflit avec les utilisateurs existants et les nouveaux utilisateurs qui s’inscrivent, nous voulons avoir un plan d’action qui empêcherait les conflits continus et synchroniserait les utilisateurs WP existants (en utilisant l’e-mail comme identifiant unique) avec les utilisateurs Discourse, et provisionnerait de nouveaux comptes Discourse SSO, lorsque de nouveaux utilisateurs WP arriveront.
Nous apprécierions vraiment de l’aide et des indications sur la façon de procéder !
Paramètres de connexion SSO wp-discourse existants :
Il semble que vos nouveaux utilisateurs WP obtiennent des identifiants d’utilisateur qui correspondent aux identifiants externes DiscourseConnect existants.
Oh là là !! Merci pour l’avertissement @omarfilip ! Y a-t-il un moyen de réinitialiser cela ou d’empêcher que cela ne continue à se produire ? Ou peut-être pourrions-nous/devrions-nous désactiver cela jusqu’à ce que nous ayons fini de migrer tous les anciens utilisateurs.
Nous avons environ 80 utilisateurs dans WP qui doivent être « détachés » des utilisateurs Discourse actuels auxquels ils semblent être associés. Ensuite, nous avons également environ 750 utilisateurs que nous devons importer de notre ancienne instance, et nous devons nous assurer qu’ils n’ont pas le même problème que celui que nous rencontrons actuellement.
J’espérais que les comptes dans WP étaient liés aux comptes Discourse en fonction de l’adresse e-mail comme identifiant unique… et non des identifiants externes/utilisateurs.
Salut @jord8on, la façon dont la correspondance fonctionne du côté de Discourse est qu’elle essaie d’abord de faire correspondre l’ID externe (qui dans votre cas pointe maintenant vers différents utilisateurs car vous avez changé votre base de données WordPress), puis essaie de faire correspondre l’adresse e-mail. Il y a de bonnes raisons d’utiliser d’abord l’ID. L’e-mail n’est pas un bon identifiant décentralisé.
Vous devez donc supprimer les enregistrements d’authentification unique dans Discourse créés lorsque vous utilisiez votre ancienne base de données WordPress. Vous pouvez utiliser une date et une heure pour les identifier, par exemple, vous feriez quelque chose comme ceci sur votre instance Discourse :
./launcher enter app
rails c
SingleSignOnRecord.where("created_at < ?", 1.month.ago) // vérifiez si cela correspond à vos attentes
SingleSignOnRecord.where("created_at < ?", 1.month.ago).delete_all
Les anciens utilisateurs importés dans la nouvelle base de données seront mis en correspondance sur la base de l’e-mail avec leurs comptes Discourse existants (car leur nouvel ID WordPress ne correspondra à aucun enregistrement SSO).
Je supprimerais également toutes les données discourse_username sur WordPress et laisserais qu’elles soient automatiquement resynchronisées via le webhook utilisateur. Vous devrez exécuter ceci (peut-être en utilisant WP CLI), qui supprime toutes les entrées pour le champ méta discourse_username.
Pour les futurs lecteurs, si vous utilisez DiscourseConnect avec une base de données WordPress, puis que vous passez à une base de données WordPress entièrement nouvelle sans migration, vous rencontrerez ce genre de problème. Vous devriez demander de l’aide avant d’effectuer ce type de changement.