우리는 정확히 이렇게 하고 있습니다 - 저희 회원(비영리 단체) 포털이 가입 시 포럼 회원의 계정을 관리합니다. 말씀하신 대로 중복 관련해서 처리가 번거로운 엣지 케이스가 꽤 있습니다.
혼동하지 않도록 정리하면: 비영리 단체 가입은 'membership(회원 자격)'이고, 포럼은 'user(사용자)'입니다.
회원 가입 시 >> (membership.email로 포럼 사용자가 존재하지 않으면) 포럼 사용자를 생성하고, username을 membership.discourseUsername으로 설정하며, 권한을 위해 그룹에 추가하고, 계정을 즉시 승인/활성화합니다.
가끔 회원이 되기 전에 커뮤니티가 어떤 곳인지 알아보기 위해 포럼에 가입하는 경우가 있는데, 이런 경우 수동으로 승인합니다.
회원 가입 시 >> (membership.email로 포럼 사용자가 이미 존재하면) 위에서 설명한 대로 membership.email을 기준으로 해당 포럼 사용자를 덮어씁니다(trample). 다소 특이한 경우이지만, 유료 회원이 단체에 가입할 때 비회원 사용자의 계정이 침해될 일은 없습니다.
외부 앱이 방대해서 이 모든 단계/API 요청을 어떻게 트리거하는지 확인하려면 코드를 꽤 파고들어야 할 수 있습니다. 양해 부탁드립니다.