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

That command is outdated, now the plugin uses the user associations table.

Can you share an example of the command that I will now run @Falco in replacement of it? Thank you for you help :bowing_man:

Following up for the latest command @Falco, thanks!

Any update or insight on the command @Falco?

This file shound give you an idea of how to construct the command you need:

Sorry for the delay, I had to upgrade discourse before I tried again. I gave the change a shot but didn’t experience success. Below is the example of what I have since tried that return true.

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

Following up on this topic, thanks for the help!

Damn you pinged me 7 times while I was on vacation…

Instead of using the PluginStore.set method, you need to create a new UserAssociatedAccount, like for example:

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

Sorry about that @Falco, we too have had a hard time when having Community members go on vacation and not being able to keep everyone in the loop. I hope you had a great vacation and I apologize.

I will give your suggestion a go tomorrow and share the results. Thank you again for your help :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