맞습니다. 리뷰 대기열 정렬 오류는 플러그인이 제거된 후에도 데이터베이스에 Akismet 리뷰 대상 항목이 남아 있기 때문에 발생합니다. 여기에는 두 가지 가능한 해결책이 있습니다:
- 사용자가 플러그인을 영구적으로 제거하기 전에, 데이터베이스에서 이러한 행을 삭제하도록 하는 rake 태스크를 제공합니다.
- 플러그인이 비활성화된 경우, 이러한 행을 제외하도록 Reviewable 클래스에 기본 스코프를 적용합니다.
어떻게 생각하시나요?
맞습니다. 리뷰 대기열 정렬 오류는 플러그인이 제거된 후에도 데이터베이스에 Akismet 리뷰 대상 항목이 남아 있기 때문에 발생합니다. 여기에는 두 가지 가능한 해결책이 있습니다:
어떻게 생각하시나요?
또 하나, 대기열에 있는 주제/게시물을 편집할 때 편집기 미리보기에서 이미지가 보이지 않는 것 같습니다.
게시물이 검토 대기 상태일 때 그런 일이 발생하는 건가요? 아니면 거절된 후에 그런 건가요? 앞서 말씀드린 것처럼, 거절된 대기 중 게시물의 업로드는 시스템에 의해 자동으로 삭제됩니다.
네, @Roman, 리뷰 대기 상태일 때 에디터 미리보기에서 이미지가 안 보인다는 거예요.
플러그인 제거는 드문 일이라고 생각하며, 기본 스코프 관련 기능은 오히려 버그를 유발할 가능성이 더 높다고 봅니다.
rake 태스크를 추가하고, README의 “제거” 섹션에 구식 레코드를 삭제하기 위해 해당 태스크를 실행하는 방법을 설명하는 내용을 넣는 것이 합리적이라고 생각합니다. 그렇게 합시다!
'대기 중인 게시물 알림’을 0으로 설정하거나 2000000000으로 설정하여 비활성화해 보았지만, 여전히 'x개의 항목을 검토해야 합니다’라는 알림 메시지가 자주 많이 뜨고 있습니다. ![]()
대기열에 대기 중인 항목이 있기 때문에 시스템이 이를 보내고 있습니다. 변경하신 설정은 대기 중인 게시글에 대한 알림 설정입니다. 대신 notify_about_flags_after를 0으로 설정하세요.
이제 해당 태스크를 사용할 수 있습니다. 다음 명령을 실행하여 데이터베이스에서 플러그인과 관련된 모든 기록을 삭제할 수 있습니다:
bundle exec rake akismet_uninstall:delete_reviewables
플러그인이 설치되어 있는지, 그리고 README의 제거 섹션을 읽었는지 확인하세요:
Roman님 감사합니다 - notify_about_flags_after를 0으로 수정하면 알림이 중단된 것을 확인했습니다 ![]()
이 작업을 위해 rake 태스크를 추가해 주셔서 정말 감사드립니다! 오늘 트래픽이 적을 때 Akismet을 다시 설치하고 rake 태스크를 실행한 후, 이 게시글에 결과를 업데이트하겠습니다.
이 문제에 대해 의견이 있으신가요? @Roman @eviltrout
검토 대기열로 바로 넘어가는 사용자들은 주제 및 게시물/답글 생성에 대한 여러 속도 제한을 우회할 수 있는 것으로 보입니다.
우회 가능한 것으로 보이는 속도 제한 옵션:
주제 생성 속도 제한, 신규 사용자 주제 생성 속도 제한, 일일 최대 주제 수, 게시물 생성 속도 제한, 신규 사용자 게시물 생성 속도 제한, 고유 게시물 최소 시간, 최대 연속 답글 수.
또한 no bump 플러그인의 뱀프 방지 기능도 우회될 수 있습니다: Discourse No Bump - #26
주제 및 게시물을 검토 대기열로 직접 보내는 옵션:
‘승인된 게시물 수’(신규 사용자의 첫 주제/게시물 승인이 필요한 경우) 및 개별 카테고리 옵션인 '모든 새 주제에 대한 관리자 승인 요구’와 아마도(새 주제 옵션만 테스트함) '모든 새 답글에 대한 관리자 승인 요구’가 해당됩니다.
네, 의도된 동작입니다. 게시물이 검토를 거쳐 허용 가능한 것으로 판단되면, 제한 사항과 관계없이 게시됩니다.
아, 그렇군요. 설명해 주셔서 감사합니다. 참고로 제 경험을 공유해 보겠습니다.
한도 제한이 적용되지 않으면, 새로운 사용자(승인된 게시글 수)는 거의 또는 최소한의 제한 없이 검토 대기열을 자유롭게 넘칠 수 있게 됩니다. 반면, 오래된 신뢰할 수 있는 계정은 속도 제한에 의해 제한을 받습니다. 단, 모든 주제나 답글을 승인하는 카테고리 옵션이 활성화된 경우, 오래된 신뢰할 수 있는 사용자도 거의 또는 최소한의 제한 없이 활동할 수 있습니다.
모든 새 주제, 그리고 새로운 사용자가 생성한 초기 주제/게시글(속도 제한이 적용되는 경우)을 승인하는 것은 상당한 작업이지만 충분히 실현 가능합니다. 하지만 사용자가 대기열을 넘치게 할 수 있는 제 경우에는 거의 불가능에 가깝습니다.
어쨌든, 이것이 의도된 설계라는 점을 명확히 해 주셔서 정말 감사합니다. 매우 도움이 됩니다. 이제 제 전략을 재검토하여 주제가나 게시글을 검토 대기열로 직접 보내는 옵션을 비활성화하고, 검토 대기열은 주로 플래그가 지정된 콘텐츠에만 사용하도록 하겠습니다. 그리고 속도 제한이 적용된 실시간 제출물은 사후에 간단히 관리하면 되며, 이렇게 하면 사용자 입장에서도 훨씬 빠르고 원활하게 작동할 것입니다.
그래서 저는 Akismet을 다시 설치하고 rake 작업을 실행했습니다. 제 과정은 다음과 같았습니다:
cd /var/discourse
./launcher enter app
bundle exec rake akismet_uninstall:delete_reviewables
불행히도 오류가 발생했고, 몇 번 다시 실행해 보았습니다:
rake aborted!
ActiveRecord::NoDatabaseError: FATAL: Peer authentication failed for user "discourse"
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:50:in `rescue in postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:33:in `postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:189:in `connection'
/var/www/discourse/lib/site_settings/db_provider.rb:61:in `table_exists?'
/var/www/discourse/lib/site_settings/db_provider.rb:16:in `all'
/var/www/discourse/lib/site_settings/defaults_provider.rb:29:in `db_all'
/var/www/discourse/lib/site_setting_extension.rb:287:in `block in refresh!'
/var/www/discourse/lib/site_setting_extension.rb:284:in `synchronize'
/var/www/discourse/lib/site_setting_extension.rb:284:in `refresh!'
/var/www/discourse/lib/site_setting_extension.rb:505:in `block in setup_methods'
/var/www/discourse/config/initializers/004-message_bus.rb:120:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `block in load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:666:in `block in load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/notifications.rb:182:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:665:in `load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `block in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `tsort_each_child'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:363:in `initialize!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:339:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:523:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Caused by:
PG::ConnectionBad: FATAL: Peer authentication failed for user "discourse"
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `new'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/pg-1.2.3/lib/pg.rb:58:in `connect'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/postgresql_adapter.rb:46:in `postgresql_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:221:in `retrieve_connection'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3.1/lib/active_record/connection_handling.rb:189:in `connection'
/var/www/discourse/lib/site_settings/db_provider.rb:61:in `table_exists?'
/var/www/discourse/lib/site_settings/db_provider.rb:16:in `all'
/var/www/discourse/lib/site_settings/defaults_provider.rb:29:in `db_all'
/var/www/discourse/lib/site_setting_extension.rb:287:in `block in refresh!'
/var/www/discourse/lib/site_setting_extension.rb:284:in `synchronize'
/var/www/discourse/lib/site_setting_extension.rb:284:in `refresh!'
/var/www/discourse/lib/site_setting_extension.rb:505:in `block in setup_methods'
/var/www/discourse/config/initializers/004-message_bus.rb:120:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:55:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `block in load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:318:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:666:in `block in load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/notifications.rb:182:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:665:in `load_config_initializer'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/engine.rb:624:in `block in <class:Engine>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `instance_exec'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:32:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:50:in `tsort_each_child'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/initializable.rb:60:in `run_initializers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:363:in `initialize!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/config/environment.rb:7:in `<main>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `block in require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:291:in `load_dependency'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.1/lib/active_support/dependencies.rb:324:in `require'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:339:in `require_environment!'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.1/lib/rails/application.rb:523:in `block in run_tasks_blocks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => akismet_uninstall:delete_reviewables => environment
(See full trace by running task with --trace)
작업을 실행하기 전에 su discourse를 실행하여 discourse 사용자로 전환해 볼 수 있을까요?
@Roman 님, 감사합니다! 정말 감사드립니다 ![]()
su discourse를 실행한 후 rake 작업을 다시 시도해 봤는데 완벽하게 작동했습니다. ![]()
‘생성일 (내림차순)’ 정렬도 이제 잘 작동하고 있습니다.
최근 invite only(초대 전용) 사이트 설정을 적용했는데, 이제 시스템이 생성한 사용자 계정에 대한 검토 대기열 항목이 Needs Approval(승인 필요)로 표시되어 있습니다.
Strange한 점은, 이 계정은 4년 된 기존 계정으로 여러 게시물과 TL2 등급을 보유하고 있지만, 최근에는 활동이 없었습니다(마지막 게시물은 2년 전). 그런데 오늘 로그인한 후 검토 플래그가 설정되었습니다.
아직 사용자 승인을 사용하지 않았고, 해당 항목은 여전히 검토 대기열에 남아 있지만, 계정은 활성화되어 있고 포럼을 사용할 수 있는 것으로 보입니다(정상적인 동작).
invite only 설정이 활성화된 상태에서, 최근 재 활성화된 계정을 새 계정으로 인식하여 검토 대상으로 표시하는 것처럼 보입니다?
수정: 이 설정이 활성화되기 며칠 전에 생성된 매우 최근의 계정에 대해서도 같은 현상이 발생했습니다.
초대 전용으로 전환할 때 이전에 이런 상황을 본 적이 있습니다. 일부 상황에서 Discourse는 사용자가 일반 가입을 통해 사이트에 액세스했기 때문에 승인이 필요하다고 판단합니다. 해당 토글이 변경되면 사용자의 기록에 “승인됨” 플래그가 설정되어 있지 않습니다.
이 문제를 추가로 조사해 보니, 해당 계정(총 4개)의 공통점은 invite_only가 설정된 _이후_에 이메일 로그인 경로(forgot_password 또는 email_login)를 통해 로그인했다는 것입니다.
Akismet에 의해 플래그가 지정된 검토 대상 주제/게시물에 ‘정지(suspend)’ 기능을 추가하는 것에 대한 논의가 있었나요? 저희 인스턴스에서는 SSO(단일 로그인)를 사용하고 있기 때문에, 회원 삭제는 거의 효과가 없습니다. 회원은 원본 제공자에서 계정에 다시 로그인하기만 하면 즉시 포럼에 접속하여 활동을 계속할 수 있기 때문입니다. 정지(suspend) 처리를 하면 제공자에서 새로운 이메일 주소로 새 계정을 만들어야 하므로 사용자의 노력을 더 많이 요구하게 됩니다.
알고 있습니다, 다소 이상한 요청일 수 있지만, 제 모더레이터들이 꽤 자주 문의하는 내용입니다. 현재로서는 모더레이터들이 시스템 내부를 수동으로 돌아다니며 사용자를 정지(suspend)해야 하므로 추가적인 노력이 필요하지만, 결국 사용자가 또 다른 이메일 주소를 버리는 것을 원하지 않기 때문에 이 노력이 가치가 있다고 판단하고 있습니다.
많은 추가 버튼을 넣는 것보다는 드롭다운 버튼을 사용하는 것이 더 적합할 것 같습니다.