Всем привет! Один из пользователей нашего форума не может войти в свой аккаунт на форуме с нашего сайта и получает эту ошибку. С другими аккаунтами пользователей проблем нет, только с этим. Я думал, что проблему можно решить, обновив форум до последней версии, но она всё ещё сохраняется.
У кого-нибудь есть идеи? Буду благодарен за любую помощь.
Есть ли что-то особенное в вашей настройке входа или в этом конкретном пользователе? Мне кажется, я уже сталкивался с похожими ошибками, связанными с учетными записями администраторов, но чем больше информации вы предоставите, тем лучше.
Я имел в виду логи по адресу [YourSite]/logs или, возможно, что-то отображается в консоли браузера при попытке входа? Там может быть дополнительная информация, которая поможет сузить круг поиска.
Являются ли они обычным пользователем (не сотрудником), и включена ли у вас система единого входа (SSO)?
Да, я полагаю, что все пользователи могут войти через SSO, так как им не нужно вводить учетные данные и пароль для входа на форум. Они автоматически перенаправляются с веб-сайта на форум.
А вот возможная запись об ошибке в логах веб-сервера:
ActiveRecord::RecordInvalid (validation failed: Primary email already adopted) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed
Кажется, у этого пользователя в Discourse указан другой адрес электронной почты, чем на вашем основном сайте. Не могли бы вы это проверить для подтверждения?
Я провел небольшую проверку, и одна из возможных причин может заключаться в том, что их адрес электронной почты случайно попал в ваш список заблокированных. Вы можете выполнить поиск и убедиться в этом на странице /admin/logs/screened_emails. Если вы найдете их там, разблокировка может решить проблему. (также стоит проверить их IP-адрес в /admin/logs/screened_ip_addresses).
Если это не так, еще одним возможным вариантом может быть то, что у них уже был аккаунт на форуме до того, как вы включили SSO. Какой SSO вы используете?
Мне было интересно, использовали ли вы Discourse Connect или что-то другое, и с чем именно вы его подключили для обеспечения аутентификации пользователей (например, с WordPress).
Мы уже сталкивались с этой ошибкой ранее, я только что выполнил поиск в нашей системе тикетов.
Это происходит, когда:
включена опция «требовать активацию» (require activation = true);
в Discourse есть пользователь U1 с определённым адресом электронной почты, возможно, с внешним ID A;
в провайдере DiscourseConnect есть пользователь U2 с тем же адресом электронной почты, но с другим внешним ID (B).
При входе пользователя Discourse проверяет, существует ли пользователь с внешним ID B. Если такого пользователя нет, то обычно Discourse выполняет сопоставление по адресу электронной почты. Однако, поскольку включена опция «требовать активацию», адрес электронной почты считается ненадёжным, и этот шаг пропускается. В результате пользователь не связывается с U1, так как это могло бы привести к захвату аккаунта.
Таким образом, Discourse решает создать нового пользователя. Однако это не удаётся, поскольку пользователь U1 уже существует с таким же адресом электронной почты.
Было бы полезно, если бы в случае, когда адрес электронной почты уже существует, но считается ненадёжным, выводилась более понятная ошибка. Также непонятно, почему отображается общая ошибка Rails.
Возможные решения:
если адреса электронной почты на стороне провайдера DiscourseConnect верифицированы и могут считаться надёжными, установите require_activation = false;
или
измените внешний ID пользователя U1 на B;
или
измените адрес электронной почты пользователя U1 на другой.
Добавляю текст «запрошенное изменение было отклонено», чтобы эта тема находилась при поиске по этой ошибке.
Спасибо большое за ваш подробный ответ! Адреса электронной почты на нашем сайте проверяются при входе пользователя. Поэтому я сначала попробую решить проблему методом 1. Но в настройках администратора я не нашел, где находится опция «требовать активацию по электронной почте».
Для сайтов, использующих плагин WP Discourse для аутентификации, администраторы сайта также могут отмечать адреса электронной почты конкретных пользователей как подтверждённые на странице настроек пользователя:
Это безопаснее и проще, чем отключать проверку электронной почты для всех пользователей сайта.
Интересно, когда это началось. Я почти уверен, что описанная вами ситуация раньше приводила к следующему сообщению об ошибке: «В вашей учётной записи возникла проблема. Пожалуйста, свяжитесь с администратором сайта».
Здесь ещё один случай сбоя валидатора Rails, который возвращает эту ошибку, и он существует уже 6,5 лет. В контексте DiscourseConnect это действительно то, что мы наблюдаем лишь в последние несколько месяцев.
Спасибо за вашу помощь, но мы не используем WP. Мы используем образ Docker для Discourse. Правильный способ его настроить — добавить require_activation=true в секцию env: файла app.yml?
Нет, см. Login error - #17 by RGJ, как уже было указано ранее: этот параметр необходимо передавать для каждого пользователя отдельно. Если у вас кастомная реализация, это потребует изменения серверного кода.