Ich habe eine benutzerdefinierte OmniAuth-Strategie implementiert sowie einen Authenticator, der Discourses Auth::ManagedAuthenticator erweitert.
Wenn ich dies jedoch in meiner Entwicklungsumgebung teste, lande ich schließlich auf diesem Bildschirm, anstatt sofort eingeloggt zu werden:
Die Informationen werden zwar korrekt aus dem Auth-Hash ausgefüllt, aber ich möchte nicht, dass Benutzer hier ihren Benutzernamen oder Namen ändern können. Wie muss ich meine Implementierung bzw. die Foreneinstellungen anpassen, damit dieser Bildschirm übersprungen wird und das Benutzerkonto sofort erstellt (falls es noch nicht existiert) und der Benutzer eingeloggt wird?
Authenticator:
class MyAuthenticator < ::Auth::ManagedAuthenticator
def name
'my_authenticator'
end
def enabled?
true
end
def register_middleware(omniauth)
omniauth.provider name.to_sym, {}
end
end
Strategie:
require 'omniauth'
...
class OmniAuth::Strategies::MyAuthenticator
include OmniAuth::Strategy
option :name, "my_authenticator"
...
def callback_phase
...
@user_id = ...
@username = ...
@avatar = ...
@email = ...
...
end
...
def auth_hash
{
provider: "my_authenticator",
uid: @user_id,
info: {
name: @username,
image: @avatar,
email: @email
},
extra: {}
}
end
end
OmniAuth.config.add_camelization('my_authenticator', 'MyAuthenticator')
plugin.rb:
before_auth do
...
auth_provider authenticator: MyAuthenticator.new()
...
end
