Liaison des utilisateurs OAuth2 au sein de Discourse

Occasionally, un utilisateur rencontrera un problème où chaque fois qu’il tente de se connecter, on lui demande de créer un nouveau compte Discourse. Cela se produit généralement soit avec des comptes hérités qui se connectent à nouveau à Discourse, soit s’ils s’étaient inscrits avec un nom d’utilisateur et un mot de passe et tentent maintenant de se connecter via OAuth. Par le passé, pour résoudre ce problème, il fallait lier les identifiants Auth0 OAuth2 de l’utilisateur à son identifiant utilisateur dans Discourse en exécutant la commande suivante depuis la console Rails au sein de l’instance Discourse :

PluginStore.set('oauth2_basic', 'oauth2_basic_user_google-apps|tony.danza@aol.com', {"user_id":7235})

Le problème semble être que cela ne persiste plus ; en fait, cela retourne =>True alors qu’auparavant cela retournait Ok. Je suis à l’invite pry, ce qui, dans le passé, n’était pas le cas. Lorsque je quitte Pry, cela me déconnecte également de la console Rails.

Une idée de ce qui pourrait se produire ici ? Merci !

Utilisation de ce plugin : GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub

That command is outdated, now the plugin uses the user associations table.

1 « J'aime »

Can you share an example of the command that I will now run @Falco in replacement of it? Thank you for you help :bowing_man:

Following up for the latest command @Falco, thanks!

Any update or insight on the command @Falco?

This file shound give you an idea of how to construct the command you need:

1 « J'aime »

Sorry for the delay, I had to upgrade discourse before I tried again. I gave the change a shot but didn’t experience success. Below is the example of what I have since tried that return true.

[1] pry(main)> PluginStore.set('oauth2_basic', 'user_associated_accounts_google-apps|tony.danza@gmail.com', {"user_id":1234})
=> true

Following up on this topic, thanks for the help!

Damn you pinged me 7 times while I was on vacation…

Instead of using the PluginStore.set method, you need to create a new UserAssociatedAccount, like for example:

UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|tony.danza@aol.com', user_id: 7235)

Sorry about that @Falco, we too have had a hard time when having Community members go on vacation and not being able to keep everyone in the loop. I hope you had a great vacation and I apologize.

I will give your suggestion a go tomorrow and share the results. Thank you again for your help :pray:

Salut @Falco, je reviens vers toi à ce sujet. Lorsque j’essaie d’exécuter la commande suggérée ci-dessus, je reçois le message suivant :

root@ip-172-31-20-121-app:/var/www/discourse# rails c
NOTE: L'héritage de Faraday::Error::ClientError est obsolète ; utilisez Faraday::ClientError à la place. Il sera supprimé dans la version 1.0 ou ultérieurement.
Faraday::Error::ClientError.inherited appelé depuis /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
[1] pry(main)> UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|nico@auth0.com', user_id: 1722)
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERREUR : la valeur de clé en double viole la contrainte d'unicité "associated_accounts_provider_uid"
DÉTAIL : La clé (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) existe déjà.
depuis /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/patches/db/pg.rb:69:in `async_exec_params'
Causé par PG::UniqueViolation: ERREUR : la valeur de clé en double viole la contrainte d'unicité "associated_accounts_provider_uid"
DÉTAIL : La clé (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) existe déjà.

depuis /var/www/discours