discourse DB에서 external_id를 업데이트하는 방법에 대한 정보를 포럼에서 찾고 있었습니다.
다음 주제가 흥미로워서 공유합니다:
그래도 데이터베이스에서 external_id를 업데이트할 때 발생할 수 있는 영향에 대한 통찰이 필요했습니다.
그냥 SQL update를 실행해서 새로운 올바른 external_id를 설정하면 될까요? 이로 인해 숨겨진 문제가 발생할 수 있나요? 예를 들어 사용자가 현재 세션을 열고 있는 경우나 다른 상황에서는요?
저는 외부 시스템에서 사용자의 계정 ID를 external_id로 사용하여 SSO를 통해 사용자를 생성하고 있습니다. (다른 방식으로 모델링해야 할 수도 있지만, 적어도 당분간은 외부 시스템 모델을 변경하지 않을 수 있으면 좋겠습니다.)
제게는 문제가 되는 부분이, 사용자가 외부 시스템에서 여러 계정을 가질 수 있고, 이를 하나의 계정으로 병합할 수 있다는 점입니다. 병합 방식에 따라 같은 사용자/이메일에 대해 새로운 external_id가 부여될 수 있습니다.
require_activation 옵션을 사용 중인데, 언급된 주제에서 읽은 바와 같이 레코드를 삭제하고 재생성되기를 기다릴 수 없습니다.
감사합니다
RGJ
(Richard - Communiteq)
2
네, 그렇게 하셔도 되지만, 먼저 근본적인 문제를 수정해야 합니다.
예를 들어, 계정 병합 시 항상 가장 작은 ID가 할당/사용되도록 확인하세요.
네… 외부 계정 병합 시에는 가장 오래된 계정을 우선하고 있습니다… 하지만 가끔은 그게 필요한 게 아니에요.
일부 계정은 포럼과 상호작용하는 계정이고(예를 들어 A형), 다른 일부 계정은 그런 용도로 쓰이지 않는 계정입니다(B형).
그래서 먼저 B형 계정을 만들고…
나중에 A형 계정을 만들면, 포럼에서는 A형 계정으로 활동하게 됩니다.
그리고 나중에 A와 B를 병합하면 가장 오래된 계정을 존중하게 되는데, 이 계정은 external_id가 다릅니다.
그래서 네…
외부 시스템 관련해서 해결책을 찾아야 할 것 같아요…
하지만 당분간 매일 실행되는 cron을 설정해서 이런 일이 발생했는지 확인하고 external_id를 수정하는 방식으로 가려고 합니다.
감사합니다!
RGJ
(Richard - Communiteq)
4
그 경우 다음 중 하나를 선택할 수 있습니다.
a) SSO 동기화 메커니즘을 사용하여 모든 계정을 Discourse에 동기화합니다.
b) Discourse에 로그인된 계정을 추적합니다.
c) 병합 시 외부 ID 조회를 수행하여 Discourse에 사용된 계정(들)을 확인합니다.