결국, 우리 회사가 인수되었습니다. 즉, 모든 사용자의 이메일이 @old_company.com에서@new_company.com으로 변경되어야 합니다.
기존 이메일과 새 이메일 주소를 매핑한 목록이 있습니다. 제가 하고 싶은 것은 사용자에게 @new_company.com 이메일 주소를 추가하고 자동으로 확인(confirm)하는 것입니다. 그렇지 않으면 사용자가 직접 확인 이메일을 처리해야 하는데, 현실적으로 그런 일은 일어나지 않을 것입니다.
관리자 권한으로 보조 이메일을 추가하고 자동으로 확인하는 방법이 있을까요?
Simon은 다음과 같이 언급했습니다.
하지만 이것이 어떻게 작동하는지 명확하지 않습니다. 이메일 주소가 아직 확인되지 않았는데, 어떻게 계정에 동기화할 수 있나요? 이는 제가 다음과 같이 해야 한다는 의미인가요?
API를 통해 사용자의 보조 이메일 추가
(아마도) 확인 이메일이 전송되지 않도록 10분 동안 발신 이메일 비활성화
saml sync email 활성화
사용자가 SAML로 로그인할 때 계정 확인 및 업데이트 수행
참고: 이 예시에서는 SAML 제공자도 변경됩니다.
보조 이메일이 아직 확인되지 않았더라도, 위의 설정을 했을 때 사용자가 해당 이메일로 처음 로그인하려고 하면 자동으로 확인되고 계정에 연결되나요?
UI/API를 통해 자동으로 확인하는 방법이 있는지 확실하지 않습니다. SSO가 있는 경우 이메일/신원 확인은 해당 서비스에서 처리하는 것 같습니다. 그렇다면 sso_sync를 사용하면 이미 확인된 데이터/이메일을 가져와 이를 ‘신뢰할 수 있는’ 것으로 사용하는 방식이 될 것입니다.
조금 사실 확인을 해본 후…
/admin/users/sync_sso는 DiscourseConnect 전용입니다. 이미 알고 계셨을 것 같지만, 나중에 이 글을 읽는 사람들을 위해 명시적으로 말씀드립니다.
하지만 이 용도에 유용할 수 있는 auth_overrides_emails 관리자 설정도 있습니다.
기본적으로, SAML 제공업체가 인증된 이메일을 보내고 auth_overrides_emails가 설정되어 있다면, Discourse는 별도의 확인 이메일을 보내지 않고 새로운 이메일을 바로 사용하게 됩니다.
질문에 대한 직접적인 답변은 아니지만: 이메일 주소를 일괄 변경해야 하는 경우, rails 콘솔을 통해 처리할 수 있습니다:
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 파일을 처리해야 한다는 것을 의미할 것입니다.