Collegamento utenti 0Auth2 all'interno di Discourse

Occasionalmente un utente può riscontrare un problema in cui, ogni volta che tenta di accedere, gli viene chiesto di creare un nuovo account Discourse. Questo accade comunemente sia con account legacy che stanno tornando ad accedere a Discourse dopo un periodo di inattività, sia quando l’utente si era registrato con nome utente e password e ora tenta di accedere tramite OAuth. In passato, per risolvere il problema, era necessario collegare le credenziali Auth0 OAuth2 al proprio ID utente in Discourse eseguendo il comando seguente dalla console Rails all’interno dell’istanza Discourse:

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

Il problema sembra essere che l’operazione non viene più mantenuta; anzi, restituisce =>True dove in precedenza restituiva Ok. Sono a un prompt Pry, cosa che in passato non mi sembrava fosse il caso. Quando esco da Pry, vengo anche espulso dalla console Rails.

Avete idea di cosa possa stare succedendo? Grazie!

Utilizzo questo plugin: GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub

Quel comando è obsoleto; ora il plugin utilizza la tabella delle associazioni utente.

Puoi condividere un esempio del comando che eseguirò ora al posto di quello, @Falco? Grazie per il tuo aiuto :bowing_man:

Aggiornamento sull’ultimo comando @Falco, grazie!

Qualche aggiornamento o informazione sul comando @Falco?

Questo file dovrebbe darti un’idea di come costruire il comando che ti serve:

Scusa il ritardo, ho dovuto aggiornare Discourse prima di riprovare. Ho tentato la modifica ma non ho avuto successo. Di seguito l’esempio di ciò che ho provato da allora e che restituisce true.

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

Facendo seguito a questo argomento, grazie per l’aiuto!

Maledizione, mi hai taggato 7 volte mentre ero in vacanza…

Invece di usare il metodo PluginStore.set, devi creare un nuovo UserAssociatedAccount, ad esempio:

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

Scusa per questo, @Falco, anche noi abbiamo avuto difficoltà quando i membri della Community vanno in vacanza e non riusciamo a tenere tutti aggiornati. Spero tu abbia passato delle belle vacanze e mi scuso.

Proverò il tuo suggerimento domani e condividerò i risultati. Grazie ancora per il tuo aiuto :pray:

Ciao @Falco, faccio un follow-up su questo fronte. Quando provo a eseguire il comando suggerito sopra, ricevo quanto segue:

root@ip-172-31-20-121-app:/var/www/discourse# rails c
NOTA: L'ereditarietà di Faraday::Error::ClientError è deprecata; utilizza Faraday::ClientError invece. Verrà rimossa nella versione 1.0 o successiva.
Faraday::Error::ClientError.inherited chiamato da /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: ERRORE: il valore della chiave duplicata viola il vincolo univoco "associated_accounts_provider_uid"
DETTAGLIO: La chiave (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) esiste già.
da /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'
Causato da PG::UniqueViolation: ERRORE: il valore della chiave duplicata viola il vincolo univoco "associated_accounts_provider_uid"
DETTAGLIO: La chiave (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) esiste già.

da /var/www/discours