DiscourseConnect não me deixa fazer login novamente

Devo ter bagunçado a instalação do DiscourseConnect usando estas instruções

Felizmente, as instruções incluem uma maneira de manipular diretamente as configurações de administrador, mas aparentemente a que eu preciso especificamente pode ter mudado?

As instruções dizem para definir, SiteSetting.enable_sso=false, mas:

root@hestia-app:/var/www/discourse# rails c
[1] pry(main)> SiteSettings.enable_sso=false
NoMethodError: undefined method `enable_sso=' for SiteSettings:Module
from (pry):1:in `__pry__'
[2] pry(main)> 

Alguém sabe qual pode ser a nova configuração de administrador?

Obrigado!

Ah, o Discourse gentilmente vinculou o artigo para o DiscourseConnect, e pronto:

cd /var/discourse
./launcher enter app
rails c
irb > SiteSetting.enable_discourse_connect = false
irb > SiteSetting.enable_local_logins = true
irb > exit
exit

Que ótimo que você encontrou isso. Se você estiver encontrando referências à configuração enable_sso nas páginas de opções do plugin WP Discourse, essas referências deveriam ter sido alteradas para usar o novo nome de configuração enable_discourse_connect na versão mais recente do plugin (versão 2.3.0).

Se ainda houver referências ao nome antigo de configuração na documentação do plugin no Meta, precisaremos atualizá-las para usar o novo nome de configuração. Vou verificar isso no início da próxima semana.

Observe que, ao configurar o DiscourseConnect, como administrador, você pode contornar o login SSO acessando a página /u/admin-login do seu site Discourse. Insira seu endereço de e-mail no formulário da página. Um link de login único será enviado para você por e-mail.

lol

Certo… isso me deu a página de login, mas assim que faço o login, sou desconectado e redirecionado para a página de login novamente.

A desconexão e o redirecionamento também acontecem com o método /u/admin-login. Há algum outro valor que eu deva definir ou desmarcar?

–edição para adicionar–

Existe uma maneira de verificar os valores da configuração de administrador a partir do CLI do rails c?

No Discourse, você precisa das seguintes configurações:

  • enable_discourse_connect
  • discourse_connect_url (deve ser definido para a página inicial do seu site WordPress)
  • discourse_connect_secret (certifique-se de que seu valor corresponda ao que você inseriu na configuração DiscourseConnect Secret Key no seu site WordPress)

Você provavelmente também deve habilitar a configuração de site verbose_discourse_connect_logging no Discourse. Com essa configuração habilitada, você pode obter alguns detalhes úteis sobre a causa do problema nos logs de erro do Discourse.

No WordPress, certifique-se de ter preenchido a configuração DiscourseConnect Secret Key. A única outra configuração que precisa ser habilitada no WordPress é a configuração Enable DiscourseConnect Provider.

@simon muito obrigado pela dica do verbose_discourse_connect_logging!

Ok, então enable_discourse_connect está como false e enable_local_logins como true

Alguém sabe o que está acontecendo aqui?

Vamos clicar no link de login por e-mail do admin

Started GET "/session/email-login/5356b2413338852f25d4382e34fb53a6" for {my.ip.address} at 2021-08-07 02:33:43 +0000
Processing by SessionController#email_login_info as HTML
  Parameters: {"token"=>"5356b2413338852f25d4382e34fb53a6"}
  Rendered default/empty.html.erb within layouts/application (Duration: 0.1ms | Allocations: 11)
  Rendered layout layouts/application.html.erb (Duration: 41.1ms | Allocations: 8102)
Completed 200 OK in 66ms (Views: 43.4ms | ActiveRecord: 0.0ms | Allocations: 12210)
Started GET "/session/email-login/5356b2413338852f25d4382e34fb53a6.json" for {my.ip.address} at 2021-08-07 02:33:48 +0000
Processing by SessionController#email_login_info as JSON
  Parameters: {"token"=>"5356b2413338852f25d4382e34fb53a6"}
Completed 200 OK in 25ms (Views: 0.3ms | ActiveRecord: 0.0ms | Allocations: 4548)

Ok, vamos clicar no link de login na instalação do Discourse

Started GET "/session/csrf" for {my.ip.address} at 2021-08-07 02:33:56 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 2ms (Views: 0.3ms | Allocations: 308)

Started POST "/session/email-login/5356b2413338852f25d4382e34fb53a6" for {my.ip.address} at 2021-08-07 02:33:57 +0000
Processing by SessionController#email_login as */*
  Parameters: {"second_factor_method"=>"1", "timezone"=>"America/Denver", "token"=>"5356b2413338852f25d4382e34fb53a6"}
Completed 200 OK in 231ms (Views: 0.3ms | ActiveRecord: 0.0ms | Allocations: 24272)

Algo deu errado aqui

Started GET "/" for {my.ip.address} at 2021-08-07 02:33:58 +0000
Processing by ListController#latest as HTML
Redirected to http://my.discourse.install/login
Filter chain halted as :redirect_to_login_if_required rendered or redirected
Completed 302 Found in 2ms (ActiveRecord: 0.0ms | Allocations: 613)

Agora apenas renderizamos a tela de login, o que funciona perfeitamente :wink:

Started GET "/login" for {my.ip.address} at 2021-08-07 02:33:59 +0000
Processing by StaticController#show as HTML
  Parameters: {"id"=>"login"}
  Rendered static/login.html.erb within layouts/application (Duration: 38.2ms | Allocations: 1520)
  Rendered layout layouts/application.html.erb (Duration: 103.4ms | Allocations: 12203)
Completed 200 OK in 130ms (Views: 105.7ms | ActiveRecord: 0.0ms | Allocations: 16261)
Started GET "/login.html" for {my.ip.address} at 2021-08-07 02:34:04 +0000
Processing by StaticController#show as HTML
  Parameters: {"id"=>"login"}
  Rendered static/login.html.erb (Duration: 22.0ms | Allocations: 1352)
Completed 200 OK in 25ms (Views: 23.0ms | Allocations: 1970)

Além disso, alguém sabe se existe um comando que eu possa usar no CLI do $rails c para exportar todos os pares de configuração/administração e seus valores? Acredito que eu poderia apenas redefinir tudo relacionado ao DiscourseConnect e começar do zero. Ou, quem sabe, exista um comando no CLI que simplesmente redefina todas as configurações administrativas para o estado inicial?

—edição para adicionar—

lol, acabei de encontrar o SiteSetting.all, agora isso é um despejo brutal de informações. Ele possui filtros?

—edição para adicionar—

Encontrei essa pequena joia em outro post:

puts SiteSetting.all.map {|s| "#{s.name}: #{s.value}" }.join "\n"

…e eu redefini tudo remotamente relacionado ao DiscourseConnect. Ainda assim, continuo com o redirecionamento de login estranho.

enable_bookmarks_with_reminders: t
meta_category_id: 2
staff_category_id: 3
lounge_category_id: 4
default_theme_id: 1
tos_topic_id: 4
guidelines_topic_id: 5
privacy_topic_id: 6
welcome_topic_id: 7
lounge_welcome_topic_id: 8
admin_quick_start_topic_id: 9
push_api_secret_key: {redacted}
send_welcome_message: f
has_login_hint: f
global_notice: 
default_trust_level: 1
default_email_digest_frequency: 1440
bootstrap_mode_enabled: t
title: {redacted}
site_description: {redacted}
short_site_description: {redacted}
login_required: t
must_approve_users: t
contact_email: {redacted}
contact_url: {redacted}
site_contact_username: system
company_name: {redacted}
base_font: oxanium
heading_font: system
logo: 3
logo_small: 4
force_https: t
allow_user_locale: t
categories_topics: 25
suggested_topics: 7
share_links: email
share_quote_buttons: email
default_dark_mode_color_scheme_id: 1
topics_per_period_in_top_summary: 25
unicode_usernames: f
enable_names: f
enable_user_directory: f
allow_anonymous_posting: t
anonymous_posting_min_trust_level: 0
allow_uncategorized_topics: f
show_copy_button_on_codeblocks: t
max_image_megapixels: 150
max_image_size_kb: 10000
max_attachment_size_kb: 10000
clean_up_uploads: t
external_system_avatars_enabled: f
vapid_public_key: {redacted}
vapid_private_key: {redacted}
vapid_public_key_bytes: {redacted}
vapid_base_url: {redacted}
enable_local_logins: t
enable_discourse_connect: f
pop3_polling_username: {redacted}
enable_discourse_connect_provider: f
discourse_connect_allows_all_return_paths: f
discourse_connect_url: 
discourse_connect_secret: 

Então, tento adicionar uma nova conta e recebo a seguinte mensagem de erro:

Não conseguimos detectar se sua conta foi criada; por favor, verifique se os cookies estão habilitados.

O quê??? Talvez eu devesse apenas reinstalar???

—edição para adicionar—

Recebi o e-mail de verificação de cadastro, funcionou, e quando tentei fazer login como novo usuário, apareceu:

Um moderador precisa aprovar manualmente sua nova conta antes que você possa acessar este fórum. Você receberá um e-mail quando sua conta for aprovada!

lol… :man_facepalming:

—edição para adicionar—

Só queria dizer que gosto da complexidade do Discourse. É uma peça de software incrível. O único fórum que realmente se aproxima é o XF. Anos atrás, quando [unknown] ainda era o desenvolvedor principal do SimpleMachines, aquilo também era algo lindo, mas essa era já acabou há muito tempo. Obrigado a todos os desenvolvedores. Vocês criaram uma máquina excelente e elegante.

O verdadeiro erro parece ser Não foi possível verificar a autenticidade do token CSRF. A resposta estava neste tópico: Can't Login to Discourse - CSRF Token Authenticity

Adicionei o seguinte ao meu arquivo apache2.conf:

RequestHeader set X-Forwarded-Proto https

Do log de erro:

Started POST "/session" for {my.ip} at 2021-08-07 11:45:54 +0000
Processing by SessionController#create as */*
  Parameters: {"login"=>"{me}", "password"=>"[FILTERED]", "second_factor_method"=>"1", "timezone"=>"America/Denver"}
Can't verify CSRF token authenticity.
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Filter chain halted as :verify_authenticity_token rendered or redirected
Completed 403 Forbidden in 13ms (Views: 1.5ms | ActiveRecord: 0.0ms | Allocations: 898)

Fico feliz que você tenha encontrado a causa. Tenho curiosidade: como você configurou seu Discourse? Estou imaginando que você não está usando a instalação padrão via Docker?

Atualizei as referências em Install and configure the WP Discourse Wordpress plugin for Discourse :+1:

Eu usei o Docker, mas fiz um proxy reverso dele no Apache2 para poder executá-lo atrás do Painel de Controle Hestia como um host virtual. Eu configurei o Hestia com o Apache2 em vez do Nginx… por isso é que usei o Apache2.

Se você olhar o final deste tópico, verá minha configuração.