요약 - 새로운 WordPress 사용자가 주문을 하거나 가입하면, Discourse의 기존 사용자와 어떻게 연결되거나 덮어쓰는 것 같습니다. 어떻게 문제를 해결해야 할지 모르겠습니다.
배경:
WordPress를 DiscourseConnect 제공자로 사용하여 wp-discourse 플러그인을 통해 SSO를 설정하고 있습니다.
Digital Ocean 드롭렛에 호스팅된 Discourse 커뮤니티를 출시했습니다.
Discourse 커뮤니티를 출시하고 wp-discourse 플러그인으로 SSO를 연결했을 때, WordPress는 AWS Lightsail에 호스팅되고 Plesk를 제어 패널로 사용했습니다.
올해早些에 Nexcess WordPress 관리형 호스팅으로 이전했으며, Discourse 연결은 그대로 유지되는 것 같았습니다.
새 WordPress 설치로 이전할 때 사용자를 이전하지 않았습니다. 사용자는 내보내졌으며, 곧 가져오기를 계획하고 있습니다.
큰 조정 작업을 진행 중이므로 우리 WordPress 사이트는 잠시 동안 폐쇄되어 있습니다.
지난 몇 달 동안 많은 사람들이 WordPress(WooCommerce)에서 주문을 했습니다. 그런데 특이한 점을 발견했습니다… WordPress에서 사용자 계정을 보고 Discourse 사용자 이름 필드를 확인하면, 그 사용자 이름이 Discourse의 기존 사용자의 것으로 표시되고 있습니다. 어딘가에서 Discourse와의 연결이 꼬여 있는 것 같습니다. 오늘 가입한 사용자의 Discourse 사용자 이름은 tennisdpm인데, 기존 사용자로 2020년에 가입한 사람임을 알 수 있습니다.
곧 기존 WordPress 인스턴스에 계정이 있던 모든 사용자를 새 인스턴스에 추가(이전)할 예정입니다. 그러나 기존 사용자와 새로 가입하는 사용자 사이에 충돌이 있는 것으로 보이므로, 지속적인 충돌을 방지하고 기존 WP 사용자를 Discourse 사용자와 동기화(이메일을 고유 식별자로 사용)하며, 새 WP 사용자가 합류할 때 새로운 SSO Discourse 계정을 생성하는 행동 계획이 필요합니다.
Hey @jord8on, 디스커스 쪽에서 매칭이 작동하는 방식은 먼저 외부 ID를 매칭을 시도하는 것입니다(여러분의 경우 워드프레스 데이터베이스를 변경했기 때문에 현재 서로 다른 사용자를 가리키고 있습니다). 그런 다음 이메일 주소를 사용하여 매칭을 시도합니다. ID를 우선 사용하는 데에는 몇 가지 좋은 이유가 있습니다. 이메일은 좋은 탈중앙식 식별자가 아니기 때문입니다.
따라서 여러분이 해야 할 일은 이전 워드프레스 데이터베이스를 사용하던 동안 디스커스에서 생성된 단일 로그인(SSO) 기록을 삭제하는 것입니다. 이를 식별하기 위해 날짜와 시간을 사용할 수 있습니다. 예를 들어 디스커스 인스턴스에서 다음과 같은 작업을 수행할 수 있습니다.
./launcher enter app
rails c
SingleSignOnRecord.where("created_at < ?", 1.month.ago) // 이 결과가 기대와 일치하는지 확인
SingleSignOnRecord.where("created_at < ?", 1.month.ago).delete_all
새 데이터베이스로 가져오는 기존 사용자는 이메일을 기준으로 기존 디스커스 계정과 매칭됩니다(새 워드프레스 ID가 어떤 SSO 기록에도 일치하지 않으므로).
또한 워드프레스의 모든 discourse_username 데이터를 제거하고 사용자 웹훅을 통해 자동으로 다시 동기화되도록 하는 것이 좋습니다. discourse_username 메타 필드의 모든 항목을 삭제하는 다음 명령을 실행해야 합니다(이를 위해 WP CLI를 사용할 수 있습니다).
이 글을 나중에 읽을 분들을 위해, 만약 DiscourseConnect를 하나의 워드프레스 데이터베이스와 함께 사용하다가 마이그레이션 없이 완전히 새로운 워드프레스 데이터베이스로 이동한다면 이러한 유형의 문제가 발생할 수 있습니다. 이러한 유형의 변경을 수행하기 전에 도움을 구하는 것이 좋습니다.