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

Cette commande est obsolète ; le plugin utilise désormais la table des associations d’utilisateurs.

Peux-tu partager un exemple de la commande que je vais maintenant exécuter @Falco à la place de celle-ci ? Merci pour ton aide :bowing_man:

Relance pour la dernière commande @Falco, merci !

Des nouvelles ou des informations sur la commande @Falco ?

Ce fichier devrait vous donner une idée de la manière de construire la commande dont vous avez besoin :

Désolé pour le retard, j’ai dû mettre à jour Discourse avant de réessayer. J’ai tenté le changement mais sans succès. Voici un exemple de ce que j’ai essayé depuis et qui renvoie true.

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

Suite à ce sujet, merci pour votre aide !

Merde, tu m’as notifié 7 fois pendant mes vacances…

Au lieu d’utiliser la méthode PluginStore.set, tu dois créer un nouveau UserAssociatedAccount, par exemple :

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

Désolé pour cela, @Falco. Nous aussi, nous avons eu du mal lorsque des membres de la communauté partaient en vacances et qu’il était impossible de tenir tout le monde informé. J’espère que vous avez passé d’excellentes vacances, et je m’excuse.

Je vais tester votre suggestion demain et partager les résultats. Merci encore pour votre aide :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