취소된 멤버십 처리

멤버십을 구매한 사용자를 인증하기 위해 WordPress SSO를 사용하고 있습니다(멤버 여부 판단을 위해 WordPress에 커스텀 로직을 구현했습니다). 현재까지는 잘 작동하고 있지만, 멤버십이 취소된 사용자를 어떻게 처리해야 할지 고민이 됩니다.

물론 멤버십이 취소되면 로그인할 수 없게 됩니다. 하지만 사용자가 포럼에 계속 접속하여 세션을 유지하는 경우를 대비해, 취소 시 수동으로 로그아웃 처리를 해야 합니다. (페이스북 그룹에서 이 포럼으로 전환하면서 수동 작업은 없앨 줄 알았는데 말이죠.)

그 외에도 두 가지 문제가 있습니다.

  • 포럼에 작성한 주제/게시글은 어떻게 되나요? 이 내용들은 유지되길 바라므로, 사용자를 삭제할 수는 없을 것 같습니다.
  • 취소된 멤버에게는 다이제스트 이메일이 발송되지 않도록 해야 합니다. 제가 어떤 "조치"를 취하기 전까지는 Discourse는 계정이 취소되었다는 사실을 전혀 모릅니다. 단, 사용자의 콘텐츠는 삭제하지 않는 전제 하에, 그 "조치"란 무엇일까요?

이 모든 문제를 사용자 억제(User Suppression)로 해결할 수 있으며, 이를 자동화하는 모범 사례가 있을까요? 어떤 형태의 커스텀 코드가 필요할 것 같지만, 코드를 피할 수 있는 방법이 있는지 확인하고 싶습니다.

감사합니다.

익명 처리를 할 수 있습니다. 이렇게 하면 정보는 남아 있지만 사용자 정보는 삭제됩니다.

또 다른 방법으로는 사용자 생성 대신 새 그룹에 추가하는 로직을 구현하는 것입니다. 이렇게 하면 다이제스트는 해당 카테고리에 접근할 수 있는 사용자만 받을 수 있습니다.

마지막으로, 취소된 모든 사용자에게 로그아웃(또는 계정 삭제)을 강제하는 크론 잡을 실행하는 것도 좋은 방법입니다.

@marianord, 감사합니다. 두 번째 단락을 완전히 이해하지 못한 것 같습니다. "사용자를 생성하는 대신"이라고 하셨을 때, 정확히 사용자 라이프사이클의 어떤 단계에서 말씀하시는 건가요? 아마도 단순한 점을 놓치고 있는 것 같은데, 제안하신 내용이 명확하지 않습니다. 좀 더 설명해 주실 수 있을까요?

또한, 익명화(anonymize) 기능을 살펴보겠지만, 몇 가지 질문이 있습니다.

  • 해당 사용자의 게시글 옆에 표시되는 사용자 이름은 어떻게 나타날까요?
  • 제가 해당 사용자에게 같은 이메일 주소 등으로 멤버십 재가입을 설득하는 데 성공한다면, 그 "익명화"가 어떤 식으로 되돌아오는 건가요? 즉, 이전 게시글에 사용자 이름이 다시 표시되나요?

다시 한번 감사합니다.

그에 대해 가장 큰 우려는 다이제스트 이메일입니다. 이메일이 발송되는 사용자 대상 기능이기 때문입니다. 다른 옵션으로 다이제스트 설정을 수동으로 변경하여 이메일을 절대 보내지 않도록 하는 방법이 있을 것 같은데, 맞습니까? (다만, 이 역시 수동 작업이며, 궁극적으로는 API를 통해 가능해지기를 바랍니다.)

이 방법이 실현 가능하면, 저는 기술적으로 사용자에 대해 아무 조치도 취할 필요가 없습니다. 사용자는 Discourse에서 유효한 상태로 유지되지만, 이메일은 중단되고(위 참조), 더 이상 로그인할 수 없게 됩니다.

이 방식이 작동할 수 있을 것 같습니다. 이 문제에 대해 의견이 있으신가요?

Discourse API를 통해 사용자를 정지(Suspend)하는 것이 이를 자동화하는 좋은 방법일 수 있습니다. 사용자가 정지되면 Discourse에서 로그아웃되고 더 이상 다이제스트 이메일을 받지 않습니다. 사용자가 정지될 때 message가 지정되면, 해당 메시지가 이메일로 사용자에게 전송됩니다. 이를 통해 회원권을 갱신하도록 유도할 수 있습니다.

참고할 점은 정지 기능이 어려운 사용자를 처리하도록 설계된 것이며, 향후 갱신될 수 있는 만료된 회원권 상황을 처리하도록 설계된 것은 아니라는 것입니다. 정지된 사용자에게 전송되는 이메일 템플릿을 맞춤 설정하려면 사이트의 user_notifications.account_suspended.text_body 텍스트를 사용자 지정해야 할 수 있습니다.

익명화된 사용자가 작성한 게시글은 다음과 같이 표시됩니다:

사용자의 익명화를 해제하는 쉬운 방법은 없습니다. 제가 아는 유일한 접근 방식은 Rails 콘솔에서 익명 사용자를 새 사용자와 병합하는 것입니다. 사용자를 익명화하면 모든 식별 데이터가 제거되므로, 어떤 계정을 병합해야 할지 파악하기가 어려울 수 있습니다. 사용자가 회원권을 갱신할 가능성이 있다면, 사용자를 정지하는 것이 더 나은 접근 방식일 것입니다.

감사합니다, @simon - 정말 도움이 많이 됩니다.

말씀하신 내용으로 볼 때, 정지(Suspension)가 여기서는 적절한 접근 방식인 것 같습니다. 다만, 발송되는 이메일에 대해 한 가지 질문이 있습니다. 사용자가 취소할 때 CRM 기반 이메일을 발송하고 있어서, Discourse에서는 아무것도 발송하지 않는 것이 좋습니다.

"사용자가 정지될 때 message가 지정되면, 해당 메시지가 이메일로 사용자에게 발송됩니다."라고 언급하셨습니다.

만약 메시지를 제공하지 않는다면, 아무것도 발송되지 않고 템플릿을 업데이트할 필요가 전혀 없는 것인가요(전혀 발송되지 않으므로)?

정지 기능만 보고 있는데, "정지 사유(Suspension Reason)"와 이메일 필드가 어떻게 사용되는지에 대해 조금 명확하지 않습니다.

결국 제 목표는 사용자를 정지하고 그 외에는 아무것도 하지 않는 것입니다 :slight_smile:

다시 한번 감사합니다.

그렇습니다. 가장 쉬운 테스트 방법은 일회용 이메일 주소를 가진 사용자를 생성한 후, UI를 통해 해당 사용자를 정지하고 정지를 해제해 보는 것입니다.

사용자가 정지되면 suspended_until과 reason이 설정되어야 합니다. 이 필드들은 정지된 사용자가 사이트에 로그인하려고 할 때 표시됩니다. 관리자 / 사용자 정의 / 텍스트 페이지에서 login.suspended_with_reason을 검색하여 이 텍스트를 사용자 지정할 수 있습니다.

hide suspension reasons(정지 사유 숨기기) 사이트 설정을 활성화하지 않는 한, 정지된 사용자의 사용자 카드와 프로필 페이지에 사용자가 정지되었음을 알리는 알림이 표시됩니다. hide suspension reasons 사이트 설정을 활성화하면, 이 알림은 스태프만 볼 수 있습니다.