Fehler bei der Verwendung des discourse-oauth2-basic-Plugins mit NeonCRM

Ich denke, ich beginne damit, unseren aktuellen Droplet zu löschen und ihn von Grund auf neu einzurichten, da dieser Docker vor einigen Jahren eingerichtet wurde. Ich melde mich zurück, sobald ich das erledigt und getestet habe.

Klingt nach einem guten Plan. Für die meisten Communities empfehlen wir, beim Standard-Branch tests-passed zu bleiben, da dieser die neuesten Discourse-Funktionen und Fehlerkorrekturen enthält. Seit dem letzten stabilen Release gab es viele Änderungen im Bereich der Authentifizierung, sodass es sein könnte, dass Dinge von selbst funktionieren.

@david, ich habe mir heute die Zeit genommen, es noch einmal zu versuchen. Ich verwende nun eine frische Discourse-Installation (die neueste Version auf dem stabilen Kanal, wie du empfohlen hast).

Ich habe OAuth2 mit dem Plugin eingerichtet, genau wie zuvor, mit folgenden Einstellungen:

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

Wenn ich die manuell formatierte URL verwende, erhalte ich dies (was neu ist):

Authorization timed out, or you have switched browsers. Please try again.

Und der übliche Fehler in den Logs:

(oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

Auf der anderen Seite erhalte ich, wenn ich die OAuth2-Schaltfläche im Discourse-Login-Fenster verwende:

Oops

Die Software, die dieses Diskussionsforum betreibt, ist auf ein unerwartetes Problem gestoßen. Wir entschuldigen uns für die Unannehmlichkeiten.

Detaillierte Informationen über den Fehler wurden protokolliert und eine automatische Benachrichtigung generiert. Wir werden uns das ansehen.

Ich erhalte auch folgende Fehler, die in /logs protokolliert werden:

ArgumentError (Ungültige URI: ) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/excon-0.71.0/lib/excon.rb:126:in `new'

und

Fehler beim Behandeln einer Ausnahme im Ausnahme-App-Middleware: Ungültige URI:

@david Ich habe deinen früheren Vorschlag ausprobiert, oauth2_user_json_url zu setzen und oauth2_fetch_user_details zu deaktivieren. Dabei erhielt ich nach dem Versuch eine Reihe (neuer) Fehler:

ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column “provider_uid” violates not-null constraint
DETAIL: Failing row contains (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’

Failed to handle exception in exception app middleware : PG::NotNullViolation: ERROR: null value in column “provider_uid” violates not-null constraint
DETAIL: Failing row contains (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).

Und natürlich der übliche Fehler:

(oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected

Ich habe jedoch bei diesem letzten Fehler (CSRF Detected) im Reiter „env

Hey Denis,

hast du schon etwas herausgefunden?
Ich habe denselben Fehler:
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column “provider_uid” violates not-null constraint

Wie hast du das behoben?

Viele Grüße,
Beam

Denis und ich haben festgestellt, dass NeonCRM sich nicht wirklich an die OAuth2-Spezifikation hält. Sie senden die user_id innerhalb der access_token-Variable, und diese kann nicht als tatsächliches Access Token verwendet werden.

Deshalb musst du oauth2_fetch_user_details deaktivieren und oauth2_callback_user_id_path auf token setzen (nicht access_token, da die OAuth2-Ruby-Bibliothek den Namen für die interne Verwendung umbenennt).

Damit sollte es funktionieren, aber es gibt keine Möglichkeit, die E-Mail-Adresse oder den Namen des Benutzers abzurufen.

Hey Denis,

ich verwende Mattermost, daher verhält es sich etwas anders. Deine Informationen haben mich jedoch dazu gebracht, die Einstellungen genauer zu prüfen, und jetzt funktioniert es. Vielen Dank!!

Hier sind meine Einstellungen für Mattermost als OAuth2-Anbieter für Discourse:

Einstellungen als Text für Suchmaschinen:

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: HAKEN
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: HAKEN

Auf der Mattermost-Seite ist die Callback-URL wie folgt festgelegt:
https://base.animalrebellion.org/auth/oauth2_basic/callback

Ich würde gerne noch sehen, wie man first_name und last_name im “json name path” zu full_name zusammenfügt, aber ich kann auch damit leben, nur die Eigenschaft “username” oder “first_name” zu verwenden.

Hoffe, das hilft!

Viele Grüße!
Beam

Links zu Ressourcen:
Link zum Plugin: GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub
Link zur Installation des Discourse-Plugins: Install plugins on a self-hosted site

Schön, dass es bei dir funktioniert, @Beam!