Implementei uma estratégia personalizada do OmniAuth + um autenticador que estende o Auth::ManagedAuthenticator do Discourse.
No entanto, ao testar isso no meu ambiente de desenvolvimento, acabo eventualmente nesta tela, em vez de ser logado imediatamente:
As informações são preenchidas corretamente a partir do hash de autenticação, mas não quero que os usuários possam alterar seu nome de usuário ou nome aqui. Como posso alterar minha implementação ou as configurações do fórum para que esta tela seja ignorada e a conta do usuário seja criada imediatamente (se não existir) e o usuário seja logado?
Autenticador:
class MyAuthenticator < ::Auth::ManagedAuthenticator
def name
'my_authenticator'
end
def enabled?
true
end
def register_middleware(omniauth)
omniauth.provider name.to_sym, {}
end
end
Estratégia:
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
