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

그걸 발견해 주셔서 감사합니다. WP Discourse 플러그인의 옵션 페이지에서 enable_sso 설정에 대한 참조를 확인하셨다면, 해당 참조들은 플러그인의 최신 릴리스(버전 2.3.0)에서 새로운 enable_discourse_connect 설정 이름으로 변경되었어야 합니다.

만약 Meta의 플러그인 문서에 여전히 구식 설정 이름에 대한 참조가 남아 있다면, 이를 새로운 설정 이름으로 업데이트해야 합니다. 다음 주 초에 이를 다시 확인하겠습니다.

참고로 DiscourseConnect를 설정하는 동안 관리자는 Discourse 사이트의 /u/admin-login 페이지로 이동하여 SSO 로그인을 우회할 수 있습니다. 해당 페이지의 양식에 이메일 주소를 입력하면, 일회용 로그인 링크가 이메일로 전송됩니다.

ㅋㅋ

음… 이렇게 하니 로그인 페이지는 뜨긴 하는데, 로그인하면 로그아웃되고 다시 로그인 페이지로 리다이렉트됩니다.

/u/admin-login 메서드에서도 로그아웃과 리다이렉트가 발생합니다. 설정하거나 해제해야 할 다른 값이 있을까요?

–추가 편집–

rails c CLI에서 관리자 설정 값을 확인할 수 있는 방법이 있을까요?

Discourse에서는 다음 설정이 필요합니다:

  • enable_discourse_connect
  • discourse_connect_url (WordPress 사이트의 홈 페이지로 설정해야 합니다)
  • discourse_connect_secret (WordPress 사이트의 DiscourseConnect Secret Key 설정에 입력한 값과 일치하는지 확인하세요)

Discourse에서 verbose_discourse_connect_logging 사이트 설정도 활성화하는 것이 좋습니다. 이 설정을 활성화하면 Discourse 오류 로그에서 문제의 원인에 대한 유용한 세부 정보를 얻을 수 있습니다.

WordPress에서는 DiscourseConnect Secret Key 설정을 채워 넣었는지 확인하세요. WordPress에서 활성화해야 하는 다른 유일한 설정은 Enable DiscourseConnect Provider 설정입니다.

@simon verbose_discourse_connect_logging 팁을 알려주셔서 정말 감사합니다!

자, enable_discourse_connect는 false이고 enable_local_logins는 true입니다.

여기서 무슨 일이 일어나고 있는지 아는 분이 있을까요?

관리자 로그인 이메일 링크를 클릭해 보겠습니다

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 명령어가 있을 수도 있겠죠?

—추가 수정—

아, 방금 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: 

그래서 새 계정을 추가하려고 했는데, 다음 오류 메시지가 나타났습니다:

계정이 생성되었는지 감지할 수 없습니다. 쿠키가 활성화되어 있는지 확인해 주세요.

뭐라고요? 그냥 다시 설치해야 하나요???

—추가 편집—

회원가입 확인 이메일은 받았고, 잘 작동했으며, 새 사용자로 로그인하려고 했을 때 다음 메시지가 떴습니다:

이 포럼에 접근하려면 관리자가 새 계정을 수동으로 승인해야 합니다. 계정이 승인되면 이메일을 보내드리겠습니다!

ㅋㅋ… :man_facepalming:

—추가 편집—

discourse의 복잡성은 정말 마음에 듭니다. 정말 놀라운 소프트웨어입니다. 이 정도에 근접하는 포럼은 XF 정도입니다. 몇 년 전 [unknown]이 SimpleMachines의 메인 개발자였을 때, 그건 정말 멋진 것이었지만, 그 시대는 이미 오래 전에 끝났습니다. 모든 개발자분들께 감사드립니다. 여러분이 만든 이 훌륭한, 우아한 기계에요.

실제 오류는 **Can’t verify CSRF token authenticity.**인 것 같습니다. 이 스레드에서 답을 찾았습니다: 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는 사용했지만, Hestia Control Panel에서 가상 호스트로 실행할 수 있도록 Apache2 뒤에서 리버스 프록시로 설정했습니다. Hestia를 Nginx 대신 Apache2로 설정했기 때문에 Apache2를 사용한 것입니다.

이 스레드의 끝부분을 보면 제 설정을 확인할 수 있습니다.