부 이메일 주소를 자동으로 확인하는 방법은 무엇인가요?

이 문제에 대해 몇 가지 게시물을 봤지만, 정확히 해결하는 내용은 없는 것 같습니다.

결국, 우리 회사가 인수되었습니다. 즉, 모든 사용자의 이메일이 @old_company.com에서 @new_company.com으로 변경되어야 합니다.

기존 이메일과 새 이메일 주소를 매핑한 목록이 있습니다. 제가 하고 싶은 것은 사용자에게 @new_company.com 이메일 주소를 추가하고 자동으로 확인(confirm)하는 것입니다. 그렇지 않으면 사용자가 직접 확인 이메일을 처리해야 하는데, 현실적으로 그런 일은 일어나지 않을 것입니다.

관리자 권한으로 보조 이메일을 추가하고 자동으로 확인하는 방법이 있을까요?

Simon은 다음과 같이 언급했습니다.

하지만 이것이 어떻게 작동하는지 명확하지 않습니다. 이메일 주소가 아직 확인되지 않았는데, 어떻게 계정에 동기화할 수 있나요? 이는 제가 다음과 같이 해야 한다는 의미인가요?

  1. API를 통해 사용자의 보조 이메일 추가
  2. (아마도) 확인 이메일이 전송되지 않도록 10분 동안 발신 이메일 비활성화
  3. saml sync email 활성화
  4. 사용자가 SAML로 로그인할 때 계정 확인 및 업데이트 수행

참고: 이 예시에서는 SAML 제공자도 변경됩니다.

보조 이메일이 아직 확인되지 않았더라도, 위의 설정을 했을 때 사용자가 해당 이메일로 처음 로그인하려고 하면 자동으로 확인되고 계정에 연결되나요?

image

참고로, 확인 이메일 관련해서 제가 오해했던 부분이 하나 있었습니다. 관리자(admin)는 두 개의 이메일을 받게 되는데, 하나는 기존 이메일을 확인하기 위한 것이고, 다른 하나는 변경 사항을 확인하기 위한 것입니다.

처음에는 이 설정이 모든 사용자에게 적용되는 줄 알았지만, 위 이미지의 설정을 통해 직원(staff)에게만 적용되도록 설정할 수 있습니다. 이렇게 하면 일반 사용자는 변경 사항을 확인하기 위한 이메일 하나만 받게 됩니다.

아직 사용자가 이메일을 자동으로 확인하는 방법에 대해서는 알아봐야 할 것 같습니다 :thinking:

UI/API를 통해 자동으로 확인하는 방법이 있는지 확실하지 않습니다. :thinking: SSO가 있는 경우 이메일/신원 확인은 해당 서비스에서 처리하는 것 같습니다. 그렇다면 sso_sync를 사용하면 이미 확인된 데이터/이메일을 가져와 이를 ‘신뢰할 수 있는’ 것으로 사용하는 방식이 될 것입니다.


조금 사실 확인을 해본 후… :slight_smile:

/admin/users/sync_sso는 DiscourseConnect 전용입니다. 이미 알고 계셨을 것 같지만, 나중에 이 글을 읽는 사람들을 위해 명시적으로 말씀드립니다.

하지만 이 용도에 유용할 수 있는 auth_overrides_emails 관리자 설정도 있습니다.

기본적으로, SAML 제공업체가 인증된 이메일을 보내고 auth_overrides_emails가 설정되어 있다면, Discourse는 별도의 확인 이메일을 보내지 않고 새로운 이메일을 바로 사용하게 됩니다. :+1:

질문에 대한 직접적인 답변은 아니지만: 이메일 주소를 일괄 변경해야 하는 경우, 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

제안해 주신 방법들을 다음과 같이 시도해 보았습니다:

1. API를 통해 사용자에게 보조 이메일 추가

이메일은 미확인 상태이지만 계정에 연결되어 있습니다.

2. 다음 설정 구성

image

image

image

  • SAML 동기화를 true로 설정하는 것을 잊었지만, 이것이 결과에 영향을 미쳤다고 생각하지는 않습니다. 문제는 여전히 이메일 확인 상태에서의 충돌인 것 같습니다.

3. 결과

결과적으로 새로운 회사 이메일을 기반으로 새로운 사용자 계정이 생성되었습니다. 최악의 경우 이 계정들을 병합할 수는 있지만, 이는 정말 곤란한 최악의 시나리오입니다.

기존 계정에서 여전히 미확인된 이메일을 볼 수 있습니다. 어떤 일이 일어나는지 확인하기 위해 확인 메일을 재전송해 보려 했으나 403 오류(Forbidden)가 발생했습니다.

이메일을 먼저 확인한 후에야 동기화할 수 있는 것처럼 보입니다. :confused:

제가 놓치고 있는 것이 없는 한, 두 번째 이메일을 확인하는 방법이 필요합니다.

이 경우에도 이메일 확인과 관련하여 동일한 문제가 있는지, 아니면 이미 확인된 것으로 간주되는지 궁금합니다. 추가적인 복잡성은 user@company.com의 사용자 부분도 변경되었다는 점입니다. 하지만 이는 아마도 기존 이메일과 새 이메일 간의 매핑을 담은 CSV 파일을 처리해야 한다는 것을 의미할 것입니다.

SSO에서 이메일을 변경하고, auth overrides emails를 활성화한 뒤, 평소처럼 SSO를 통해 계정에 로그인하는 방식을 더 많이 고려하고 있었습니다.

무언가를 놓치고 있을 수도 있습니다.

이것이 실제로 그렇게 작동하고 있는 것 같습니다. 즉, 로그인에 사용된 이메일 주소와 SAML 서버를 기반으로 SAML 계정을 검증하는 방식이죠. 문제는 완전히 다른 SAML IDP(새로운 회사)가 사용되고 있다는 점입니다.

따라서 시스템은 SAML 이메일로 이메일을 올바르게 덮어쓰거나 생성하지만, Discourse 계정이 새 이메일 주소와 연결되어 있지 않기 때문에 이는 완전히 새로운 계정에 대해 수행됩니다.

그러나 기존 계정에 이미 새 SAML 이메일 주소가 Discourse에서 확인되어 있다면, 로그인 과정이 순조롭게 진행되며 해당 이메일이 사용자의 새 SAML 로그인 이메일이 됩니다.

흠. :thinking: 새로운 IDP로의 전환 시 어떤 형태의 외부 ID를 기준으로 매핑이 이루어졌을 것이라고 가정하고 작업했던 것 같습니다.

토큰 정보도 함께 추가하여 Rails 콘솔을 통해 이메일을 활성화/확인하는 것이 가능할 것 같습니다. 다음과 같은 방식으로요:

old_domain = "<insert_here_the_old_domain>"
new_domain = "<insert_here_the_new_domain>"

users = UserEmail.where("email like '%" + old_domain + "'")

users.each do |user_email|
    user = User.find_by_id(user_email.user_id)
    user.email = user.email.gsub(old_domain, new_domain)
    user.email_tokens.create(email: user.email)
    user.activate
    user.save!
    puts "."
end

제가 아는 한, 그런 일은 일어나지 않았습니다. 다른 플랫폼의 경우 이메일 목록을 직접 가져와서 매핑을 수행해야 했습니다.

점점 이 방법이 진행하는 데 적합해 보입니다. 우리는 당신들의 서비스를 통해 호스팅되고 있으므로, 이 내용을 CSM에게 전달하고 진행 상황을 공유하겠습니다.