Erreur de connexion

Bonjour à tous ! Un de mes utilisateurs du forum n’a pas pu utiliser son compte pour se connecter au forum depuis notre site web et a reçu cette erreur. Il n’y a pas de problème avec les autres comptes utilisateurs, mais seulement avec le sien. J’ai pensé que cela pourrait peut-être être résolu en mettant à jour le forum vers la dernière version, mais le problème persiste.
Avez-vous une idée ? J’apprécie toute aide.

2 « J'aime »

Y a-t-il quelque chose de spécial dans votre configuration de connexion, ou concernant cet utilisateur en particulier ? Je pense avoir déjà vu des erreurs similaires concernant des comptes administrateur, mais plus vous pourrez fournir d’informations, mieux ce sera. :+1:

Voyez-vous des erreurs dans vos /logs ?

2 « J'aime »

Merci pour votre réponse !
Voulez-vous dire les logs dans /var/discourse/shared/standalone/log/rails ?

Dans quel log une telle erreur est-elle enregistrée ?
production.log ou production_errors.log ?

le second est vide.

1 « J'aime »

Je voulais dire les logs à [YourSite]/logs, ou éventuellement s’il y a quelque chose qui s’affiche dans la console du navigateur lorsqu’ils essaient de se connecter ? Il pourrait y avoir des détails supplémentaires qui aideraient à cerner le problème.

S’agit-il d’un utilisateur non-employé, et avez-vous activé l’authentification unique (SSO) ?

1 « J'aime »

Oui, je suppose que tous les utilisateurs peuvent se connecter avec le SSO, car ils n’ont pas besoin de saisir à nouveau leur compte et leur mot de passe pour se connecter au forum. Ils sont directement transférés du site web au forum.

Ceci est une erreur dans la console :

Et voici un journal d’erreurs possible sur le web :
ActiveRecord::RecordInvalid (la validation a échoué : L’e-mail principal est déjà adopté) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed

2 « J'aime »

Je pense qu’il semble que cet utilisateur particulier ait une adresse e-mail différente sur Discourse que sur votre site principal. Pourriez-vous vérifier cela pour confirmer ?

1 « J'aime »

Oui, je viens de vérifier que l’e-mail affiché dans le panneau utilisateur de Discourse et l’e-mail sur notre site principal sont les mêmes.

2 « J'aime »

J’ai fait quelques recherches et une raison possible pourrait être que leur e-mail a accidentellement atterri sur votre liste de blocage. Vous pouvez rechercher et voir si c’est le cas sur votre page /admin/logs/screened_emails. Si vous le trouvez là, le débloquer pourrait faire l’affaire. :+1: (il est également utile de vérifier leur IP dans /admin/logs/screened_ip_addresses aussi)

Si ce n’est pas le cas, une autre possibilité est qu’ils avaient un compte de forum avant que vous n’activiez l’authentification unique (SSO). Quelle authentification unique utilisez-vous ?

1 « J'aime »

J’ai vérifié /admin/logs/screened_ip_addresses et il est vide.

Désolé, je ne comprends pas ce que vous voulez dire (“Quelle authentification unique utilisez-vous ?”). Existe-t-il de nombreux types d’authentification unique ?

1 « J'aime »

Je me demandais si vous aviez utilisé Discourse Connect ou autre chose, et à quoi vous l’aviez connecté pour fournir votre authentification utilisateur (Wordpress, par exemple).

Nous avons déjà rencontré cette erreur, je viens de faire une recherche dans notre système de tickets.

Cela se produit lorsque vous avez :

  • require activation défini sur true
  • un utilisateur U1 sur Discourse avec une adresse e-mail spécifique, potentiellement avec un ID externe A.
  • un utilisateur U2 du côté du fournisseur DiscourseConnect avec la même adresse e-mail et un ID externe différent (B)

L’utilisateur se connecte, Discourse vérifie s’il existe un utilisateur avec l’ID externe B, il n’existe pas.
Normalement, Discourse effectuera une correspondance par e-mail comme prochaine étape, mais comme require activation est défini, l’adresse e-mail n’est pas fiable et il saute cette étape et n’associera pas l’utilisateur U1 car cela permettrait un détournement de compte.
Donc, Discourse décide de créer un nouvel utilisateur. Cela échoue car l’utilisateur U1 existe déjà avec cette adresse e-mail.

Il serait bon qu’il y ait une meilleure erreur si l’e-mail existe mais n’est pas fiable. Je ne suis pas non plus sûr de la raison pour laquelle une erreur Rails générique s’affiche.

Résolutions :

  • si vos adresses e-mail du côté du fournisseur DiscourseConnect sont vérifiées et peuvent être fiables, définissez require activation sur false.
    ou
  • changez l’ID externe de l’utilisateur U1 en B
    ou
  • changez l’adresse e-mail de l’utilisateur U1 pour autre chose

Ajout du texte « le changement que vous vouliez a été rejeté » afin que ce sujet soit trouvé lorsque quelqu’un recherche cette erreur.

7 « J'aime »

Oui, nous utilisons Discourse Connect et il est connecté à notre site.

Merci beaucoup pour votre réponse détaillée ! Les adresses e-mail sur notre site sont vérifiées lors de la connexion de l’utilisateur. Je vais donc d’abord essayer de résoudre le problème avec la méthode 1. Mais dans les paramètres d’administration, je n’ai pas trouvé où se trouve “exiger l’activation par e-mail”.

C’est un paramètre renvoyé lors du processus SSO, voir Disable email verification for SSO - #4 by simon

Pour les sites qui utilisent le plugin WP Discourse pour l’authentification, les administrateurs du site peuvent également marquer les adresses e-mail des utilisateurs individuels comme vérifiées depuis la page des préférences de l’utilisateur :

C’est plus sûr et plus facile que de désactiver la vérification par e-mail pour tous les utilisateurs du site.

Je me demande quand cela a commencé. Je suis à peu près sûr que le scénario que vous décrivez générait auparavant ce message d’erreur : « Il y a un problème avec votre compte. Veuillez contacter l’administrateur du site. »

Voici un autre cas de validateur Rails défaillant qui renvoie cette erreur, et il date de 6,5 ans. Dans le contexte de DiscourseConnect, c’est effectivement quelque chose que nous n’avons vu que ces derniers mois.

1 « J'aime »

Nous utilisons l’image discourse, donc devrions-nous simplement ajouter require_activation=true dans env: ?

Merci pour votre aide, mais nous n’utilisons pas WP. Nous utilisons l’image Docker de Discourse. La bonne façon de le configurer est d’ajouter require_activation=true dans env: du fichier app.yml ?

Non, voir Login error - #17 by RGJ comme posté précédemment, vous devez passer ce paramètre par utilisateur. Cela nécessite de le modifier dans votre code côté serveur s’il s’agit d’une implémentation personnalisée.

1 « J'aime »