Penso di iniziare cancellando il nostro Droplet attuale e configurandolo da capo, dato che questo Docker è stato impostato alcuni anni fa. Farò rapporto quando avrò completato l’operazione e lo avrò testato.
Sembra un buon piano. Per la maggior parte delle community consigliamo di rimanere sul ramo predefinito tests-passed, perché offre le ultime e migliori funzionalità di Discourse e le correzioni di bug. Ci sono stati molti cambiamenti nell’autenticazione dall’ultima versione stabile, quindi potresti scoprire che alcune cose iniziano a funzionare da sole.
@david, oggi ho dedicato del tempo a riprovare. Sto ora utilizzando una nuova installazione di Discourse (l’ultima versione stabile, come hai suggerito).
Ho configurato OAuth2 tramite il plugin, esattamente come prima, con le seguenti impostazioni:
oauth2 client id: MY-CLIENT-ID
oauth2 client secret: MY-CLIENT-SECRET
oauth2 authorize url: https://MY-NEON-ID.z2systems.com/np/oauth/auth
oauth2 token url: https://www.z2systems.com/np/oauth/token
Se utilizzo l’URL formattato manualmente, ottengo questo messaggio (che è nuovo):
L'autorizzazione è scaduta o hai cambiato browser. Riprova.
E l’errore abituale nei log:
(oauth2_basic) Errore di autenticazione! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | Rilevato CSRF
D’altra parte, se uso il pulsante OAuth2 nella finestra di accesso di Discourse, ottengo:
Oops
Il software che alimenta questo forum di discussione ha riscontrato un problema imprevisto. Ci scusiamo per l'inconveniente.
Sono state registrate informazioni dettagliate sull'errore e generata una notifica automatica. Lo esamineremo.
Ricevo anche i seguenti errori registrati in /logs:
ArgumentError (URI non valido: ) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/excon-0.71.0/lib/excon.rb:126:in `new'
e
Errore nella gestione dell'eccezione nel middleware dell'app di eccezione: URI non valido:
@david Ho provato il tuo suggerimento precedente relativo all’impostazione di oauth2_user_json_url e alla disabilitazione di oauth2_fetch_user_details, ma dopo averlo fatto ho ricevuto una serie di (nuovi) errori:
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERRORE: valore null nella colonna “provider_uid” viola il vincolo not-null
DETTO: Riga fallita contenente (1, oauth2_basic, null, null, 2019-12-19 01:00:49.076659, {}, {“token”: “9607”, “expires”: false}, {}, 2019-12-19 01:00:49.077107, 2019-12-19 01:00:49.077107).
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.4/lib/patches/db/pg.rb:69:in `async_exec_params’
Impossibile gestire l’eccezione nel middleware dell’app di eccezione: PG::NotNullViolation: ERRORE: valore null nella colonna “provider_uid” viola il vincolo not-null
DETTO: Riga fallita contenente (1, oauth2_basic, null, null, 2019-12-19 01:00:49.076659, {}, {“token”: “9607”, “expires”: false}, {}, 2019-12-19 01:00:49.077107, 2019-12-19 01:00:49.077107).
E naturalmente il solito:
(oauth2_basic) Errore di autenticazione! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF rilevato
Tuttavia, ho notato in quest’ultimo (CSRF rilevato) che nella scheda env viene indicato:
hostname forum-app
process_id 762
application_version db7d00a8dce2cc1f7b9d86192cde1f55dd57408b
HTTP_HOST forum.efao.ca
È normale che l’hostname non corrisponda al nome HTTP_HOST? Potrebbe essere questo il motivo per cui ricevo l’errore CSRF?
Ehi Denis,
hai avuto sorte?
Ho ricevuto lo stesso errore:
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERRORE: il valore null nella colonna “provider_uid” viola il vincolo not-null
Come l’hai risolto?
Grazie,
Beam
Denis e io abbiamo scoperto che NeonCRM non aderisce realmente alla specifica OAuth2: stanno inviando l’user_id all’interno della variabile access_token, che non può essere utilizzata come token di accesso effettivo.
Quindi, è necessario disabilitare oauth2_fetch_user_details e impostare oauth2_callback_user_id_path su token (non access_token, perché la libreria Ruby OAuth2 la rinomina per uso interno).
In questo modo, dovrebbe funzionare, ma non c’è modo di recuperare l’email o il nome dell’utente.
Ciao Denis,
Sto usando Mattermost, quindi si comporta in modo diverso.
Tuttavia, le tue informazioni mi hanno spinto a esaminare più da vicino le impostazioni e ora funziona, grazie!!
Ecco le mie impostazioni per Mattermost come provider OAuth2 per Discourse:
Impostazioni in formato testo per i motori di ricerca:
oauth2 client id:
oauth2 client secret:
oauth2 authorize url:https://chat.animalrebellion.org/oauth/authorize
oauth2 token url:https://chat.animalrebellion.org/oauth/access_token
oauth2 token url method: POST
oauth2 callback user id path:
oauth2 callback user info paths
oauth2 fetch user details: CHECKED
oauth2 user json url:https://chat.animalrebellion.org/api/v4/users/me
oauth2 user json url method: GET
oauth2 json user id path: id
oauth2 json username path: username
oauth2 json name path: username
oauth2 json email path: email
oauth2 json email verified path: email_verified
oauth2 json avatar path:
oauth2 email verified: CHECKED
Lato Mattermost, l’URL di callback è impostato come:
https://base.animalrebellion.org/auth/oauth2_basic/callback
Mi piacerebbe ancora capire come unire first_name e last_name nel campo “json name path” per ottenere full_name, ma posso accontentarmi di usare semplicemente la proprietà “username” o “first_name”.
Spero sia utile.
Un saluto!
Beam
Link alle risorse:
Link al plugin: GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub
Link su come installare il plugin Discourse: Install plugins on a self-hosted site
Felice che tu abbia risolto il problema, @Beam!
