DiscourseConnect не позволяет мне снова войти в систему

Должно быть, я что-то напортачил при установке DiscourseConnect, следуя этим инструкциям

К счастью, в инструкциях есть способ напрямую управлять настройками администратора, но, похоже, та, которая мне нужна, изменилась?

В инструкциях сказано установить SiteSetting.enable_sso=false, однако:

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)> 

Кто-нибудь знает, как теперь называется нужная настройка администратора?

Спасибо!

Ах, Discourse любезно предоставил ссылку на статью для DiscourseConnect, и вот результат:

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

Отлично, что вы это обнаружили. Если вы находите ссылки на настройку enable_sso на страницах настроек плагина WP Discourse, то эти ссылки должны были быть изменены на использование нового имени настройки enable_discourse_connect в самом последнем выпуске плагина (версия 2.3.0).

Если в документации плагина на Meta всё ещё встречаются ссылки на старое имя настройки, нам нужно будет обновить их, чтобы они использовали новое имя. Я проверю это в начале следующей недели.

Обратите внимание, что при настройке DiscourseConnect администратор может обойти вход через SSO, перейдя на страницу /u/admin-login вашего сайта Discourse. Введите свой адрес электронной почты в форму на этой странице. На ваш email будет отправлена одноразовая ссылка для входа.

ха-ха

Ладно… это действительно вывело меня на страницу входа, но после входа меня сразу же выкидывает обратно и перенаправляет на страницу входа.

Выход и перенаправление также происходят при использовании метода /u/admin-login. Неужели есть какое-то другое значение, которое мне нужно установить или снять?

–редактирование для добавления–

Есть ли способ проверить значения настроек администратора через rails c cli?

В Discourse необходимы следующие настройки:

  • enable_discourse_connect
  • discourse_connect_url (должна быть установлена в адрес главной страницы вашего сайта WordPress)
  • discourse_connect_secret (убедитесь, что её значение совпадает с тем, что вы указали в настройке DiscourseConnect Secret Key на вашем сайте WordPress)

Также, вероятно, стоит включить настройку сайта verbose_discourse_connect_logging в Discourse. При включённой настройке вы сможете получить полезные детали о причине проблемы в журналах ошибок Discourse.

В WordPress убедитесь, что вы заполнили настройку DiscourseConnect Secret Key. Единственная другая настройка, которую необходимо включить в WordPress, — это настройка Enable DiscourseConnect Provider.

@simon огромное спасибо за совет с verbose_discourse_connect_logging!

Итак, enable_discourse_connect имеет значение false, а enable_local_loginstrue.

Возможно, кто-то знает, что здесь происходит?

Давайте нажмём на ссылку для входа по электронной почте из админ-панели

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)

Хорошо, давайте нажмём на ссылку входа на установленном 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)

Здесь что-то пошло не так

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)

Теперь просто отображается экран входа, и всё работает как надо :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)

Кстати, знает ли кто-нибудь, есть ли команда в $rails c cli, которая выведет все пары настроек администратора и их значения? Думаю, я мог бы просто сбросить все настройки DiscourseConnect и начать заново. Или, чёрт возьми, может быть, есть команда cli, которая сбросит все настройки администратора до исходного состояния?

—редактирование для добавления—

lol, я только что нашёл SiteSetting.all — это просто жёсткий дамп информации. Есть ли у него фильтры?

—редактирование для добавления—

Нашёл эту маленькую жемчужину в другом посте:

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

…и я сбросил всё, что хоть как-то связано с DiscourseConnect. Всё ещё получаю странное перенаправление при входе.

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: 

Итак, я пытаюсь добавить новый аккаунт и получаю следующее сообщение об ошибке:

Мы не можем определить, был ли создан ваш аккаунт. Убедитесь, что включены файлы cookie.

Что?! Может, мне просто переустановить???

—редактирование—

Я получил письмо с подтверждением регистрации, оно сработало, но когда я попытался войти как новый пользователь, получил:

Модератор должен вручную одобрить ваш новый аккаунт, прежде чем вы сможете получить доступ к этому форуму. Вы получите письмо, когда ваш аккаунт будет одобрен!

lol… :man_facepalming:

—редактирование—

Просто хотел сказать: мне нравится сложность Discourse. Это удивительный программный продукт. Единственный форум, который действительно близок к нему, — это XF. Много лет назад, когда [unknown] был главным разработчиком SimpleMachines, это тоже было прекрасно, но та эпоха давно прошла. Спасибо всем разработчикам. Вы создали отличный, элегантный инструмент.

Похоже, что реальная ошибка заключается в невозможности проверки подлинности CSRF-токена. Ответ был в этой теме: Can't Login to Discourse - CSRF Token Authenticity

Я добавил следующее в свой файл apache2.conf:

RequestHeader set X-Forwarded-Proto https

Из лога ошибок:

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)

Рад, что вы нашли причину. Мне интересно, как вы настроили свой Discourse? Думаю, вы не используете стандартную установку через Docker?

Я обновил ссылки на Install and configure the WP Discourse Wordpress plugin for Discourse :+1:

Я использовал Docker, но настроил обратный прокси через Apache2, чтобы запустить его в качестве виртуального хоста в панели управления Hestia. Я установил Hestia с Apache2 вместо Nginx, поэтому и использовал Apache2.

Если посмотреть в конец этой темы, можно увидеть мою конфигурацию.