SSO не работает: запрошенный URL или ресурс не найден

Я использую Memberful в качестве SSO, и после сегодняшнего обновления я начал получать ошибку «The requested URL or resource could not be found» при входе в Discourse. Сейчас я даже не могу попасть в панель администратора. В Memberful я успешно авторизуюсь, но в Discourse войти не получается. Как мне дальше проводить диагностику? Я выполнил обновление без плагинов, запустил discourse-doctor, но ничего странного не обнаружил.

До обновления у меня возникали проблемы с созданием новых пользователей в Discourse при регистрации. В консоли я видел следующие ошибки, но после обновления войти не могут даже существующие пользователи. Пожалуйста, помогите!

А вот ответ от Memberful по этому вопросу:

Он сказал, что это похоже на проблему самого форума. Мы не уверены, связано ли это с присланным вами скриншотом (скриншотом первоначального лога ошибки), но при попытке синхронизировать участников мы получаем внутреннюю ошибку сервера:

Oops - Error 500

Oops

Программное обеспечение, управляющее этим форумом, столкнулось с непредвиденной проблемой. Приносим извинения за неудобства.

Подробная информация об ошибке была записана в лог, и автоматически сформировано уведомление. Мы изучим этот вопрос.

Дальнейших действий с вашей стороны не требуется. Однако, если ошибка сохраняется, вы можете предоставить дополнительные сведения, включая шаги для воспроизведения ошибки, опубликовав тему в категории обратной связи на сайте.

Это происходит при POST-запросах к /admin/users/sync_sso.

Он предлагает связаться с вашим хостинг-провайдером Discourse или администратором, чтобы узнать, смогут ли они помочь предотвратить эту ошибку.

Попробовали ли вы следующее для входа:

с Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

По сути, вышеизложенное означает, что когда вы не можете войти как администратор при включённом SSO, у вас есть два варианта:

  • перейдите на вашфорум.com//u/admin-login, введите данные администратора и попробуйте войти (это предполагает, что ваш SMTP-сервер/сервис работает).
  • Второй вариант — использовать консоль Ruby, как объяснено выше.

Вы недавно вносили какие-либо изменения в отношении уведомлений по тегам?
Если да, попробуйте отменить эти настройки через консоль.

Мне удалось войти на сайт через Memberful. Я не вижу никаких проблем.

Учитывая то, что я знаю сейчас, я думаю, что это была ложная сбой сети и/или проблема с Memberful.

Спасибо @pfaffman, который напомнил мне про маршрут /u/admin-login, я снова смог войти как администратор. Спасибо, Джей!

Так что ошибка requested url... больше не актуальна, но проблема с тем, что новые пользователи не создаются, всё ещё существует. Джей, ты смог войти, потому что у тебя уже был аккаунт, а новые пользователи не могут войти и получают ошибку авторизации.

@RGJ Я недавно вносил изменения в это. Ты действительно думаешь, что это могло вызвать проблемы с входом? Я создал один тег и установил его как отключённый по умолчанию — это было единственное изменение.

Извините, что сообщение получилось немного сумбурным, сегодня утром возникло много проблем!

До часа назад — нет. Но индекс idx_tag_users_ix1 выдаёт ошибки. Возможно, он повреждён, и мы боремся лишь с симптомами, но отключение этих уведомлений, по крайней мере, поможет снова сделать ваш форум рабочим, так как они устанавливаются при создании пользователя.

Не при наличии трассировки стека и прочего.

Вау! Это мастерски замечено!

Не уверен, в какой именно таблице это находится, но

   discourse=# reindex table tag_users;

не выдаёт никаких ошибок.

Джей опередил меня, так как мы обсуждали это за кулисами, но да, Ричард, это было решением! Вы, сэр, гениальны. Я удалил тег из списка по умолчанию отключённых, применил ко всем пользователям, и теперь всё работает снова. Я проведу несколько тестов, чтобы проверить, можно ли включить это обратно, и определить, было ли это просто повреждением или какой-то ошибкой. Спасибо, спасибо!

Редактирование: дополнение — действительно было повреждение. Я вернул уведомление о теге на место, и теперь всё работает правильно.

Боюсь, что проблема вернулась, и теперь удаление тега, который её вызывал, не помогает. Как мне идентифицировать ID тега 842, который я вижу в логах? Спасибо!

ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "idx_tag_users_ix1" DETAIL: Key (user_id, tag_id, notification_level)=(8118, 842, 0) already exists. )

Логи при попытке входа пользователя
rack-mini-profiler (3.0.0) lib/patches/db/pg.rb:69:in `exec_params'
rack-mini-profiler (3.0.0) lib/patches/db/pg.rb:69:in `exec_params'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:768:in `block (2 levels) in exec_no_cache'
activesupport (7.0.3) lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
activesupport (7.0.3) lib/active_support/dependencies/interlock.rb:41:in `permit_concurrent_loads'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:767:in `block in exec_no_cache'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract_adapter.rb:765:in `block in log'
activesupport (7.0.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract_adapter.rb:756:in `log'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:766:in `exec_no_cache'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql_adapter.rb:745:in `execute_and_clear'
activerecord (7.0.3) lib/active_record/connection_adapters/postgresql/database_statements.rb:54:in `exec_query'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/database_statements.rb:150:in `exec_insert_all'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `exec_insert_all'
activerecord (7.0.3) lib/active_record/insert_all.rb:41:in `execute'
activerecord (7.0.3) lib/active_record/persistence.rb:213:in `insert_all!'
app/models/user.rb:1734:in `set_default_tags_preferences'
activesupport (7.0.3) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.3) lib/active_support/callbacks.rb:236:in `block in halting_and_conditional'
activesupport (7.0.3) lib/active_support/callbacks.rb:599:in `block in invoke_after'
activesupport (7.0.3) lib/active_support/callbacks.rb:599:in `each'
activesupport (7.0.3) lib/active_support/callbacks.rb:599:in `invoke_after'
activesupport (7.0.3) lib/active_support/callbacks.rb:108:in `run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:929:in `_run_create_callbacks'
activerecord (7.0.3) lib/active_record/callbacks.rb:461:in `_create_record'
activerecord (7.0.3) lib/active_record/timestamp.rb:108:in `_create_record'
activerecord (7.0.3) lib/active_record/persistence.rb:1067:in `create_or_update'
activerecord (7.0.3) lib/active_record/callbacks.rb:457:in `block in create_or_update'
activesupport (7.0.3) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
activerecord (7.0.3) lib/active_record/autosave_association.rb:370:in `around_save_collection_association'
activesupport (7.0.3) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:138:in `run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:929:in `_run_save_callbacks'
activerecord (7.0.3) lib/active_record/callbacks.rb:457:in `create_or_update'
activerecord (7.0.3) lib/active_record/timestamp.rb:126:in `create_or_update'
activerecord (7.0.3) lib/active_record/persistence.rb:648:in `save!'
activerecord (7.0.3) lib/active_record/validations.rb:53:in `save!'
activerecord (7.0.3) lib/active_record/transactions.rb:302:in `block in save!'
activerecord (7.0.3) lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/transaction.rb:319:in `block in within_new_transaction'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
activesupport (7.0.3) lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction'
activerecord (7.0.3) lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction'
activerecord (7.0.3) lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
activerecord (7.0.3) lib/active_record/transactions.rb:302:in `save!'
activerecord (7.0.3) lib/active_record/suppressor.rb:54:in `save!'
app/models/discourse_connect.rb:260:in `block in match_email_or_create_user'
lib/distributed_mutex.rb:33:in `block in synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:14:in `synchronize'
app/models/discourse_connect.rb:239:in `match_email_or_create_user'
app/models/discourse_connect.rb:121:in `lookup_or_create_user_unsafe'
app/models/discourse_connect.rb:109:in `block in lookup_or_create_user'
lib/distributed_mutex.rb:33:in `block in synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:29:in `synchronize'
lib/distributed_mutex.rb:14:in `synchronize'
app/models/discourse_connect.rb:108:in `lookup_or_create_user'
app/controllers/admin/users_controller.rb:460:in `sync_sso'
actionpack (7.0.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.3) lib/abstract_controller/base.rb:215:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/rendering.rb:53:in `process_action'
actionpack (7.0.3) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
activesupport (7.0.3) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
app/controllers/application_controller.rb:415:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:415:in `with_resolved_locale'
activesupport (7.0.3) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack (7.0.3) lib/abstract_controller/callbacks.rb:233:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
activesupport (7.0.3) lib/active_support/notifications.rb:206:in `block in instrument'
activesupport (7.0.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (7.0.3) lib/active_support/notifications.rb:206:in `instrument'
actionpack (7.0.3) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
actionpack (7.0.3) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.0.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (7.0.3) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.3) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (7.0.3) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.3) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.3) lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
actionpack (7.0.3) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (7.0.3) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.3) lib/action_dispatch/journey/router