Errore nell'utilizzo del plugin discourse-oauth2-basic con NeonCRM

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!