Я видел несколько тем, затрагивающих эту проблему, но ни одна из них не решает её до конца.
Вкратце: нашу компанию выкупили. Это означает, что все пользователи перейдут с @old_company.com на @new_company.com.
У меня есть карта соответствия старых и новых адресов электронной почты. Я хотел бы добавить для пользователя адрес @new_company.com и автоматически подтвердить его. Иначе им самим придётся проходить процедуру подтверждения по электронной почте, что в реальности вряд ли произойдёт.
Есть ли способ добавить дополнительный адрес электронной почты как администратор и автоматически его подтвердить?
Саймон упоминает следующее:
Однако мне не совсем понятно, как это работает. Как можно синхронизировать адрес электронной почты с учётной записью, если этот адрес ещё не подтверждён? Это означает, что мне следует/можно:
добавить дополнительный адрес электронной почты для пользователя через API
(возможно) отключить исходящую электронную почту на 10 минут, чтобы письмо с подтверждением не было отправлено
включить saml sync email
учётные записи пользователей подтвердят и обновят данные при входе через SAML
Примечание: в этом примере мы также меняем провайдера SAML
Даже если дополнительный адрес электронной почты ещё не подтверждён, означает ли описанная выше настройка, что при первой попытке входа с этим адресом он будет автоматически подтверждён и привязан к учётной записью?
Кстати, одна проблема, которую я неправильно понял, касалась подтверждающего письма. Как администратор, вы получаете два письма: одно для подтверждения старого адреса электронной почты, а второе — для подтверждения изменения.
Я предположил, что это относится ко всем пользователям, но с настройкой, показанной на изображении выше, можно установить её так, чтобы она применялась только к сотрудникам. Это означает, что пользователи будут получать только одно письмо для подтверждения изменения.
Однако всё ещё нужно разобраться, как автоматически подтверждать адрес электронной почты для пользователя
Не уверен, что есть способ автоматически подтвердить это через UI/API. Думаю, если используется SSO, то подтверждение email/идентичности осуществляется ими? В таком случае использование sso_sync загрузит уже подтверждённые данные/email и будет считать их «надёжными».
После небольшой проверки фактов…
/admin/users/sync_sso предназначен только для DiscourseConnect. Я думаю, вы уже об этом знали, но проговорю это вслух для тех, кто будет читать это позже.
Однако также существует административная настройка auth_overrides_emails, которая может быть полезна в данном случае.
По сути, если ваш провайдер SAML отправляет подтверждённый email, и включена настройка auth_overrides_emails, Discourse начнёт использовать новый email без необходимости отправки письма для подтверждения.
Это не прямой ответ на ваш вопрос, но: в случае массового переименования адресов электронной почты вы можете сделать это через rails console:
o = "@old_company.com"
n = "@new_company.com"
UserEmail.where("email LIKE ?","%#{o}").each do |ue|
ue.email.sub! o,n
ue.save!
end
Если вы предпочитаете добавить дополнительный адрес электронной почты:
o = "@old_company.com"
n = "@new_company.com"
UserEmail.where("email LIKE ?","%#{o}").each do |ue|
sm = UserEmail.new
sm.user_id = ue.id
sm.email = ue.email.sub! o,n
sm.save!
end
Я забыл установить параметр синхронизации SAML в true, однако, думаю, это не повлияло бы на результат. Проблема всё ещё, похоже, заключается в конфликте подтверждения адреса электронной почты.
3. Результат
В результате был создан новый аккаунт пользователя на основе нового корпоративного адреса электронной почты. В худшем случае я мог бы объединить их, но это действительно неприятный сценарий.
Я всё ещё вижу неподтверждённый адрес электронной почты в старом аккаунте. Я попытался повторно отправить подтверждение, чтобы посмотреть, что произойдёт, но получил ошибку 403 (Forbidden).
Похоже, что адрес электронной почты нужно подтвердить сначала, прежде чем мы сможем их синхронизировать
Если я ничего не упускаю, похоже, мне нужен способ подтвердить второй адрес электронной почты.
Интересно, сохраняется ли здесь та же проблема с подтверждением, или адреса считаются подтверждёнными по умолчанию? Дополнительная сложность заключается в том, что изменилась и часть адреса до символа @ (имя пользователя) в user@company.com. Но я подозреваю, что это означает необходимость пройтись по CSV-файлу с сопоставлениями между старыми и новыми адресами электронной почты.
Кажется, происходит именно это: система проверяет учётную запись SAML на основе адреса электронной почты и сервера SAML, использованного для входа. Проблема в том, что это совершенно другой провайдер идентификации SAML (новая компания).
В результате система корректно переопределяет/создаёт email как SAML-адрес, но делает это для новой учётной записи, поскольку учётная запись Discourse не связана с этим новым адресом.
Однако, если у существующей учётной записи в Discourse уже подтверждён новый SAML-адрес электронной почты, то вход проходит гладко, и этот адрес становится новым email для входа через SAML.
Насколько мне известно, этого не произошло. Для другой платформы нам пришлось самостоятельно получить список адресов электронной почты и выполнить сопоставление.
Всё больше и больше похоже, что это правильный путь. Поскольку мы размещены у вас, я передам эту информацию нашему менеджеру по работе с клиентами (CSM) и буду следить за развитием темы.