0Auth2 vinculação de usuário dentro do Discourse

Ocasionalmente, um usuário pode enfrentar um problema em que, toda vez que tenta fazer login, é solicitado que crie uma nova conta no Discourse. Isso geralmente ocorre com contas antigas que estão voltando a acessar o Discourse agora, ou quando o usuário se cadastrou com nome de usuário e senha e agora está tentando fazer login usando OAuth. No passado, para resolver isso, era necessário vincular as credenciais Auth0 OAuth2 ao ID do usuário no Discourse executando o comando abaixo no console do Rails dentro da instância do Discourse:

PluginStore.set('oauth2_basic', 'oauth2_basic_user_google-apps|tony.danza@aol.com', {"user_id":7235})

Parece que o problema agora é que essa configuração não está mais persistindo; na verdade, o comando retorna =>True, enquanto anteriormente retornava Ok. Estou em um prompt do Pry, o que, no passado, não parecia ser o caso. Quando saio do Pry, ele também me remove do Console do Rails.

Alguma ideia do que pode estar acontecendo aqui? Obrigado!

Utilizando este plugin: GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub

Esse comando está desatualizado; agora o plugin usa a tabela de associações de usuários.

Você pode compartilhar um exemplo do comando que vou executar agora @Falco no lugar dele? Obrigado pela sua ajuda :bowing_man:

Acompanhando o último comando, @Falco, obrigado!

Alguma atualização ou informação sobre o comando @Falco?

Este arquivo deve dar a você uma ideia de como construir o comando que você precisa:

Desculpe pelo atraso, precisei atualizar o Discourse antes de tentar novamente. Tentei a mudança, mas não obtive sucesso. Abaixo está o exemplo do que tentei desde então e que retornou true.

[1] pry(main)> PluginStore.set('oauth2_basic', 'user_associated_accounts_google-apps|tony.danza@gmail.com', {"user_id":1234})
=> true

Acompanhando este tópico, obrigado pela ajuda!

Caralho, você me marcou 7 vezes enquanto eu estava de férias…

Em vez de usar o método PluginStore.set, você precisa criar um novo UserAssociatedAccount, como no exemplo:

UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|tony.danza@aol.com', user_id: 7235)

Desculpe por isso, @Falco. Nós também tivemos dificuldades quando membros da comunidade foram de férias e não conseguimos manter todos informados. Espero que você tenha tido ótimas férias e peço desculpas.

Vou testar sua sugestão amanhã e compartilhar os resultados. Obrigado novamente pela sua ajuda :pray:

Ei, @Falco, dando continuidade a este tópico. Quando tento executar o comando sugerido acima, recebo o seguinte:

root@ip-172-31-20-121-app:/var/www/discourse# rails c
NOTA: Herdar de Faraday::Error::ClientError está obsoleto; use Faraday::ClientError. Será removido na versão 1.0 ou posterior.
Faraday::Error::ClientError.inherited chamado de /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
[1] pry(main)> UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|nico@auth0.com', user_id: 1722)
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERRO: valor de chave duplicado viola a restrição de unicidade "associated_accounts_provider_uid"
DETALHE: A chave (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) já existe.
de /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/patches/db/pg.rb:69:in `async_exec_params'
Causado por PG::UniqueViolation: ERRO: valor de chave duplicado viola a restrição de unicidade "associated_accounts_provider_uid"
DETALHE: A chave (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) já existe.

de /var/www/discours