Débogage et résolution des problèmes courants de DiscourseConnect

En tant qu’administrateur d’un forum utilisant DiscourseConnect, vous pouvez occasionnellement recevoir des signalements d’utilisateurs indiquant qu’ils rencontrent un message d’erreur lorsqu’ils tentent de se connecter au forum. Par exemple : « Un problème est survenu avec votre compte. Veuillez contacter l’administrateur du site. »

Activer la journalisation verbose de DiscourseConnect

Pour déboguer le problème, la première chose à faire est d’activer le paramètre du site « journalisation verbose de DiscourseConnect » sur Discourse. Si ce paramètre était déjà activé, vous pouvez directement accéder aux journaux de votre site via Admin/Journaux/Journaux d’erreurs. Si le paramètre n’était pas activé précédemment, vous devrez demander à l’utilisateur de réessayer de se connecter afin de générer une entrée de journal correspondant à sa tentative de connexion échouée.

Lire l’entrée du journal

Accédez à Admin/Journaux/Journaux d’erreurs et recherchez une entrée de journal récente commençant par Verbose SSO log: Record was invalid. Si vous avez du mal à trouver l’entrée, saisissez « Record was invalid » dans la zone de recherche située en bas de la page des journaux. Cliquez sur l’entrée du journal, puis sur l’onglet « info » dans la barre d’outils des journaux :

Les informations dont vous aurez besoin sont la raison (indiquée dans l’entrée du journal), ainsi que l’email et l’external_id (trouvés dans la section info).

Résoudre les problèmes de connexion DiscourseConnect liés à require_activation

Un problème courant avec la connexion SSO est : Record was invalid: User {:primary_email=>\"has already been taken\"}.

Cela peut se produire lorsque le paramètre require_activation dans la charge utile SSO est défini sur true et que l’utilisateur possède déjà un compte sur Discourse qui n’a pas encore de single_sign_on_record associé, ou qui possède un single_sign_on_record, mais dont l’external_id ne correspond pas à l’external_id de l’utilisateur tentant de se connecter.

Pour confirmer cela, accédez à la console Rails de votre forum et recherchez un utilisateur ayant l’adresse e-mail utilisée lors de la tentative de connexion SSO échouée :

u = User.find_by_email('sally@example.com')

Vérifiez ensuite s’il existe un single_sign_on_record pour cet utilisateur :

sso_record = u.single_sign_on_record

Si l’utilisateur existe sur votre forum mais ne possède pas d’enregistrement SSO, vous pouvez créer un enregistrement pour lui en utilisant les valeurs provenant du journal SSO :

SingleSignOnRecord.create!(user_id: 2, external_id: 2, external_email: 'sally@example.com', last_payload: '')

L’utilisateur devrait maintenant pouvoir se connecter.

S’il existe déjà un enregistrement SSO pour l’utilisateur, mais que son external_id ne correspond pas à l’external_id de la tentative de connexion échouée, vous devrez investiguer la cause de cette divergence. Cela peut se produire, par exemple, si le compte d’un utilisateur a été supprimé puis recréé sur le site du fournisseur SSO. Dans ce cas, vous pouvez mettre à jour l’enregistrement SSO pour utiliser le nouvel external_id :

sso_record.external_id = <failed-sso-login-record-external_id>
sso_record.save!

L’utilisateur devrait maintenant pouvoir se connecter.

Si vous utilisez le plugin WP Discourse et que vous rencontrez le problème décrit ci-dessus, consultez Validate Email Addresses with the WP Discourse plugin pour des détails sur la résolution du problème sans avoir à accéder à la console Rails.

17 « J'aime »

I wasn’t sure how to enter the Rails console, but found the answer over here and thought I’d publish for anyone else who doesn’t know how to get into the Rails console.

  1. SSH into your site
  2. Login as root user then do the following:
  3. sudo -s
  4. cd /var/discourse/
  5. ls
  6. ./launcher enter app
  7. rails c

That should get you into the Rails console!

3 « J'aime »

I was doing this and it was not working, but I finally got it to work when I replaced this:

sso_record.external_id = <failed-sso-login-record-external_id>

with this:

sso_record.external_id = 91

Where “91” was the external_id of the user who was unable to login.

Thanks so much for this helpful discussion @simon! :raised_hands:

Yes, <failed-sso-login-record-external_id> is meant to be replaced with the external_id from the log entry.

2 « J'aime »

:man_facepalming: I was trying it with the " < > " and it wasn’t working, of course ツ

Is there an easy way to reset the SSO ties for specific accounts with the Rails console? I have a couple admin accounts that are tied to different WP accounts than I would like because originally the email addresses didn’t match properly. Can I manually set them to be tied to a different WP account?

You can find the user’s WordPress ID by going to their user page from the WordPress dashboard. The user’s ID will be displayed in the address bar of your browser as the value of the user_id query parameter.

Once you have the user’s WordPress ID, you can update their SSO record on Discourse following the steps outlined for updating the external_id at the end of the ‘Solving require_activation SSO login issues’ section of my original post. You need to be careful with this though - especially with admin accounts.

3 « J'aime »

Bonjour, nous avons essayé ces solutions mais rien n’a fonctionné… Les identifiants externes étaient identiques et le SSO est actif. Avez-vous une autre solution, s’il vous plaît ? Je suis perdu(e) :frowning:

Le problème concerne-t-il la connexion SSO pour un utilisateur particulier, ou le SSO ne fonctionne-t-il pas du tout sur votre site ?

uniquement pour un utilisateur spécifique

Assurez-vous d’avoir activé le paramètre du site journalisation détaillée SSO. Si vous l’avez fait, parvenez-vous à trouver l’erreur dans les journaux de votre site lorsque l’utilisateur tente de se connecter ? Si vous pouvez partager le journal d’erreur ici, nous pourrons peut-être vous aider. Si le journal contient des données que vous ne souhaitez pas rendre publiques, vous pouvez me les envoyer par message privé.

2 « J'aime »

Cela vous aide-t-il ? Est-ce ce dont vous avez besoin ?

Voici les détails du journal pour le membre concerné par la situation (ou du moins, le seul qui ait signalé ce problème).

Merci beaucoup !

1 « J'aime »

Merci, cela aide. Il semble que votre site fournisseur SSO soit un site WordPress. Utilisez-vous le plugin WP Discourse pour l’SSO ? Si oui, et si vous utilisez la dernière version du plugin, essayez d’accéder à la page de profil de l’utilisateur et de cocher la case « Adresse e-mail vérifiée ». Assurez-vous ensuite de cliquer sur le bouton Enregistrer. Après avoir fait cela, demandez à l’utilisateur de réessayer de se connecter.

Si vous n’utilisez pas le plugin WP Discourse, nous devrons vous fournir des instructions plus détaillées pour résoudre le problème.

4 « J'aime »

Vous avez raison, j’utilise WordPress et j’ai apporté la modification. Je demanderai à l’utilisateur de réessayer, merci beaucoup !! :smiley:

1 « J'aime »

Ça a marché ! Oui ! :smile: Merci !

5 « J'aime »